From aff6648def41c0da81e89ca9bbd34d1dc1dafce7 Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 31 Mar 2022 09:27:10 -0700 Subject: [PATCH 01/29] first crack at reorganizing documentation into /docs, standardizing README, moving extraneous README into docs, adding diagrams, etc. [SAM-209] --- README.md | 524 +----------------- docs/TODO.md | 66 +++ docs/_old/local-docker.md | 91 +++ docs/adrs/0000-TEMPLATE.md | 43 ++ docs/adrs/index.md | 5 + docs/api/index.md | 5 + docs/configuration.md | 131 +++++ docs/design/built-in-validators.md | 133 +++++ docs/design/errors.md | 49 ++ docs/design/implementation_notes.md | 147 +++++ docs/design/kafka.md | 41 ++ docs/design/link_ws_data_to_sample.md | 60 ++ docs/design/link_ws_data_to_sample_in_RE.md | 128 +++++ docs/design/validation.md | 151 +++++ docs/development/from-another-module.md | 8 + .../local-docker.md} | 2 +- docs/development/mypy.md | 3 + docs/development/using-kb-sdk.md | 57 ++ docs/{ => development}/using-pipenv.md | 4 +- docs/diagrams/system-context.puml | 53 ++ docs/diagrams/system-overview.puml | 59 ++ docs/documentation/diagrams.md | 0 docs/documentation/index.md | 33 ++ docs/documentation/readme.md | 12 + docs/documentation/release-notes.md | 0 docs/gha/index.md | 2 + docs/index.md | 28 + docs/testing/index.md | 22 + 28 files changed, 1361 insertions(+), 496 deletions(-) create mode 100644 docs/TODO.md create mode 100644 docs/_old/local-docker.md create mode 100644 docs/adrs/0000-TEMPLATE.md create mode 100644 docs/adrs/index.md create mode 100644 docs/api/index.md create mode 100644 docs/configuration.md create mode 100644 docs/design/built-in-validators.md create mode 100644 docs/design/errors.md create mode 100644 docs/design/implementation_notes.md create mode 100644 docs/design/kafka.md create mode 100644 docs/design/link_ws_data_to_sample.md create mode 100644 docs/design/link_ws_data_to_sample_in_RE.md create mode 100644 docs/design/validation.md create mode 100644 docs/development/from-another-module.md rename docs/{using-development-docker-compose.md => development/local-docker.md} (99%) create mode 100644 docs/development/mypy.md create mode 100644 docs/development/using-kb-sdk.md rename docs/{ => development}/using-pipenv.md (97%) create mode 100644 docs/diagrams/system-context.puml create mode 100644 docs/diagrams/system-overview.puml create mode 100644 docs/documentation/diagrams.md create mode 100644 docs/documentation/index.md create mode 100644 docs/documentation/readme.md create mode 100644 docs/documentation/release-notes.md create mode 100644 docs/gha/index.md create mode 100644 docs/index.md create mode 100644 docs/testing/index.md diff --git a/README.md b/README.md index 930b30f6..c0678b58 100644 --- a/README.md +++ b/README.md @@ -1,524 +1,60 @@ -# SampleService +# Sample Service Build status (master): -[![Build Status](https://travis-ci.org/kbase/sample_service.svg?branch=master)](https://travis-ci.org/kbase/sample_service) +![Build Status](https://github.com/kbase/sample_service/actions/workflows/build-test-push.yml/badge.svg) [![Coverage Status](https://coveralls.io/repos/github/kbase/sample_service/badge.svg?branch=master)](https://coveralls.io/github/kbase/sample_service?branch=master) [![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/kbase/sample_service.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/kbase/sample_service/context:python) +[![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme) -This is a [KBase](https://kbase.us) module generated by the [KBase Software Development Kit (SDK)](https://github.com/kbase/kb_sdk). +The Sample Service is a KBase "core service" which supports storage and retrieval of experimental sample data. It supports validation, access control, versioning, and linking to KBase data objects. -You will need to have the SDK installed to use this module. [Learn more about the SDK and how to use it](https://kbase.github.io/kb_sdk_docs/). -You can also learn more about the apps implemented in this module from its [catalog page](https://narrative.kbase.us/#catalog/modules/SampleService) or its [spec file](SampleService.spec). +## Table of Contents -# Description +- [Security](#security) +- [Background](#background) +- [Installation](#installation) +- [Usage](#usage) +- [API](#api) -The Sample Service stores information regarding experimental samples taken from the environment. -It supports Access Control Lists for each sample, subsample trees, and modular metadata -validation. +## Security -The SDK API specification for the service is contained in the `SampleService.spec` file. An indexed -interactive version is -[also available](http://htmlpreview.github.io/?https://github.com/kbaseIncubator/sample_service/blob/master/SampleService.html). +> TODO -# Setup and test -The Sample Service requires ArangoDB 3.5.1+ with RocksDB as the storage engine. +## Background -If Kafka notifications are enabled, the Sample Service requires Kafka 2.5.0+. +> TODO -To run tests, MongoDB 3.6+ and the KBase Jars file repo are also required. Kafka is always -required to run tests. +## Installation -See `.travis.yml` for an example of how to set up tests, including creating a `test.cfg` file -from the `test/test.cfg.example` file. +> TODO -Once the dependencies are installed, run: +## Usage -``` -pipenv install --dev -pipenv shell -make test-sdkless -``` +> TODO -`kb-sdk test` does not currently pass. +## Documentation for development, testing, design +Please see the [Documentation](./docs/index.md) for detailed information on development, testing and design. -# Installation from another module +## API -To use this code in another SDK module, call `kb-sdk install SampleService` in the other module's root directory. +> TODO -# Help +## Maintainers -You may find the answers to your questions in our [FAQ](https://kbase.github.io/kb_sdk_docs/references/questions_and_answers.html) or [Troubleshooting Guide](https://kbase.github.io/kb_sdk_docs/references/troubleshooting.html). +> TODO -# Configuring the server +## Thanks -The server has several startup parameters beyond the standard SDK-provided parameters -that must be configured in the Catalog Service by a Catalog Service administrator in order -for the service to run. These are documented in the `deploy.cfg` file. +> TODO -## Kafka Notification +## Contributing -The server may be configured to send notifications on events to Kafka - see the `deploy.cfg` file -for information. The events and their respective JSON message formats are: +> TODO -### New sample or sample version +## License -``` -{'event_type': 'NEW_SAMPLE', - 'sample_id': , - 'sample_ver': - } -``` +SEE LICENSE IN [LICENSE](./LICENSE) -### Sample ACL change - -``` -{'event_type': 'ACL_CHANGE', - 'sample_id': - } -``` - -### New data link - -``` -{'event_type': 'NEW_LINK', - 'link_id': - } -``` - -### Expired data link - -``` -{'event_type': 'EXPIRED_LINK', - 'link_id': - } -``` - -# API Error codes - -Error messages returned from the API may be general errors without a specific structure to -the error string or messages that have error codes embedded in the error string. The latter -*usually* indicate that the user/client has sent bad input, while the former indicate a server -error. A message with an error code has the following structure: - -``` -Sample service error code : -``` - -There is a 1:1 mapping from error code to error type; error type is simply a more readable -version of the error code. The error type **may change** for an error code, but the error code -for a specific error will not. - -The current error codes are: -``` -20000 Unauthorized -30000 Missing input parameter -30001 Illegal input parameter -30010 Metadata validation failed -40000 Concurrency violation -50000 No such user -50010 No such sample -50020 No such sample version -50030 No such sample node -50040 No such workspace data -50050 No such data link -60000 Data link exists for data ID -60010 Too many data links -100000 Unsupported operation -``` - -# Metadata validation - -Each node in the sample tree accepted by the `create_sample` method may contain controlled and -user metadata. User metadata is not validated other than very basic size checks, while controlled -metadata is validated based on configured validation rules. - -## All metadata - -For all metadata, map keys are are limited to 256 characters and values are limited to 1024 -characters. Keys may not contain any control characters, while values may contain tabs and -new lines. - -## Controlled metadata - -Controlled metadata is subject to validation - no metadata is allowed that does not pass -validation or does not have a validator assigned. - -Metadata validators are modular and can be added to the service via configuration without -changing the service core code. Multiple validators can be assigned to each metadata key. - -Sample metadata has the following structure (also see the service spec file): - -``` -{"metadata_key_1: {"metadata_value_key_1_1": "metadata_value_1_1", - ... - "metadata_value_key_1_N": "metadata_value_1_N", - }, - ... - "metadata_key_N: {"metadata_value_key_N_1": "metadata_value_N_1", - ... - "metadata_value_key_N_N": "metadata_value_N_N", - } -} -``` -Metadata values are primitives: a string, float, integer, or boolean. - -A simple example: -``` -{"temperature": {"measurement": 1.0, - "units": "Kelvin" - }, - "location": {"name": "Castle Geyser", - "lat": 44.463816, - "long": -110.836471 - } -} -``` - -In this case, a validator would need to be assigned to the `temperature` and `location` -metadata keys. Validators are `python` callables that accept the key and the value of the key as -callable parameters. E.g. in the case of the `temperature` key, the arguments to the function -would be: - -``` -("temperature", {"measurement": 1.0, "units": "Kelvin"}) -``` - -If the metadata is incorrect, the validator should return an error message as a string. Otherwise -it should return `None` unless the validator cannot validate the metadata due to some -uncontrollable error (e.g. it can't connect to an external server after a reasonable timeout), -in which case it should throw an exception. - - Validators are built by a builder function specified in the configuration (see below). - The builder is passed any parameters specified in the configuration as a - mapping. This allows the builder function to set up any necessary state for the validator - before returning the validator for use. Examine the validators in -`SampleService.core.validator.builtin` for examples. A very simple example might be: - - ```python - def enum_builder(params: Dict[str, str] - ) -> Callable[[str, Dict[str, Union[float, int, bool, str]]], Optional[str]]: - # should handle errors better here - enums = set(params['enums']) - valuekey = params['key'] - - def validate_enum(key: str, value: Dict[str, Union[float, int, bool, str]]) -> Optional[str]: - # key parameter not needed in this case - if value.get(valuekey) not in enums: - return f'Illegal value for key {valuekey}: {value.get(valuekey)}' - return None - - return validate_enum -``` - -### Prefix validators - -The sample service supports a special class of validators that will validate any keys that match -a specified prefix, as opposed to standard validators that only validate keys that match exactly. -Otherwise they behave similarly to standard validators except the validator function signature is: - -``` -(prefix, key, value) -``` - -For the temperature example above, if the prefix for the validator was `temp`, the arguments -would be - -``` -("temp", "temperature", {"measurement": 1.0, "units": "Kelvin"}) -``` - -A particular metadata key can match one standard validator key (which may have many -validators associated with it) and up to `n` prefix validator keys, where `n` is the length of the -key in characters. Like standard metadata keys, prefix validator keys may have multiple -validators associated with them. The validators are run in the order of the list for a particular -prefix key, but the order the matching prefix keys are run against the metadata key is not -specified. - -A toy example of a prefix validators builder function might be: - -```python -def chemical_species_builder(params: Dict[str, str] - ) -> Callable[[Dict[str, str, Union[float, int, bool, str]]], Optional[str]]: - # or contact an external db or whatever - chem_db = setup_sqlite_db_wrapper(params['sqlite_file']) - valuekey = params['key'] - - def validate_cs(prefix: str, key: str, value: Dict[str, Union[float, int, bool, str]] - ) -> Optional[str]: - species = key[len(prefix):] - if value[valuekey] != species: - return f'Species in key {species} does not match species in value {value[valuekey]}' - if not chem_db.find_chem_species(species): - return f'No such chemical species: {species} - return None - - return validate_cs -``` - -### Source metadata - -In some cases, metadata at the data source may be transformed prior to ingest into the -Sample Service - for instance, two samples from different sources may be associated with -metadata items that are semantically equivalent but have different names and are represented in -different units. Prior to storage in the Sample Service, those items may be transformed to use -the same metadata key and representation for the value. - -The Sample Service allows storing these source keys and values along with the controlled -metadata such that the original metadata may be reconstructed. The data is not validated other -than basic size checks and is stored on an informational basis only. - -See the API specification for more details. - -## Static key metadata - -A service administrator can define metadata associated with the metadata keys - e.g. metadata -*about* the keys. This might include a text definition, semantic information about the key, -an ontology ID if the key represents a particular node in an ontology, etc. This metadata is -defined in the validator configuration file (see below) and is accessible via the service API. - -## Configuration - -The `deploy.cfg` configuration file contains a key, `metadata-validator-config-url`, that if -provided must be a url that points to a validator configuration file. The configuration file -is loaded on service startup and used to configure the metadata validators. If changes are made -to the configuration file the service must be restarted to reconfigure the validators. - -The configuration file uses the YAML format and is validated against the following JSONSchema: - -``` -{ - 'type': 'object', - 'definitions': { - 'validator_set': { - 'type': 'object', - # validate values only - 'additionalProperties': { - 'type': 'object', - 'properties': { - 'key_metadata': { - 'type': 'object', - 'additionalProperties': { - 'type': ['number', 'boolean', 'string', 'null'] - } - }, - 'validators': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'module': {'type': 'string'}, - 'callable_builder': {'type': 'string'}, - 'parameters': {'type': 'object'} - }, - 'additionalProperties': False, - 'required': ['module', 'callable_builder'] - } - - } - }, - 'required': ['validators'] - } - }, - 'additionalProperties': False, - }, - 'properties': { - 'validators': {'$ref': '#/definitions/validator_set'}, - 'prefix_validators': {'$ref': '#/definitions/validator_set'}, - }, - 'additionalProperties': False -} -``` - -The configuration consists of a mapping of standard and prefix metadata keys to a further mapping -of metadata key properties, including the list of validator specifications and static metadata -about the key. Each validator is run against the metadata value in order. The `module` key is -a python import path for the module containing a builder function for the validator, while the -`callable_builder` key is the name of the function within the module that can be called to -create the validator. `parameters` contains a mapping that is passed directly to the -callable builder. The builder is expected to return a callable with the call signature as -described previously. - -A simple configuration might look like: -``` -validators: - foo: - validators: - - module: SampleService.core.validator.builtin - callable_builder: noop - key_metadata: - description: test key - semantics: none really - stringlen: - validators: - - module: SampleService.core.validator.builtin - callable_builder: string - parameters: - max-len: 5 - - module: SampleService.core.validator.builtin - callable_builder: string - parameters: - keys: spcky - max-len: 2 - key_metadata: - description: check that no strings are longer than 5 characters and spcky is <2 -prefix_validators: - gene_ontology_: - validators: - - module: geneontology.plugins.kbase - callable_builder: go_builder - parameters: - url: https://fake.go.service.org/api/go - apitoken: abcdefg-hijklmnop - key_metadata: - description: The key value contains a GO ontology ID that is linked to the sample. - go_url: https://fake.go.service.org/api/go - date_added_to_service: 2020/3/8 -``` - -In this case any value for the `foo` key is allowed, as the `noop` validator is assigned to the -key. Note that if no validator was assigned to `foo`, including that key in the metadata would -cause a validation error. -The `stringlen` key has two validators assigned and any metadata under that key must pass -both validators. The first validator ensures that no keys or value strings in in the metadata map -are longer than 5 characters, and the second ensures that the value of the `spcky` key is a -string of no more than two characters. See the documentation for the `string` validator (below) -for more information. -Finally, the wholly fabricated `gene_ontology_` prefix validator will match **any** key -starting with `gene_ontology_`. The validator code might look up the suffix of the key, -say `GO_0099593`, at the provided url to ensure the suffix matches a legitmate ontology -term. Without a prefix validator, a validator would have to be written for each individual -ontology term, which is infeasible. - -All the metadata keys have static metadata describing the semantics of the keys and other -properties that service users might need to properly use the keys. - -## Built in validators - -All built in validators are in the `SampleService.core.validator.builtin` module. - -### noop - -Example configuration: -``` -validators: - metadatakey: - validators: - - module: SampleService.core.validator.builtin - callable_builder: noop -``` - -This validator accepts any and all values. - -### string - -Example configuration: -``` -validators: - metadatakey: - validators: - - module: SampleService.core.validator.builtin - callable_builder: string - parameters: - keys: ['key1', 'key2'] - required: True - max-len: 10 -``` - -* `keys` is either a string or a list of strings and determines which keys will be checked by the - validator. If the key exists, its value must be a string or `None` (`null` in JSON-speak). -* `required` requires any keys in the `keys` field to exist in the map, although their value may - still be `None`. -* `max-len` determines the maximum length in characters of the values of the keys listed in `keys`. - If `keys` is not supplied, then it determines the maximum length of all keys and string values - in the metadata value map. - -### enum - -Example configuration: -``` -validators: - metadatakey: - validators: - - module: SampleService.core.validator.builtin - callable_builder: enum - parameters: - keys: ['key1', 'key2'] - allowed-values: ['red', 'blue', 'green] -``` - -* `allowed-values` is a list of primitives - strings, integers, floats, or booleans - that are - allowed metadata values. If `keys` is not supplied, all values in the metadata value mapping must - be one of the allowed values. -* `keys` is either a string or a list of strings and determines which keys will be checked by the - validator. The key must exist and its value must be one of the `allowed-values`. - -### units - -Example configuration: -``` -validators: - metadatakey: - validators: - - module: SampleService.core.validator.builtin - callable_builder: units - parameters: - key: 'units' - units: 'mg/L' -``` - -* `key` is the metadata value key that will be checked against the `units` specification. -* `units` is a **unit specification in the form of an example**. Any units that can be converted - to the given units will be accepted. For example, if `units` is `K`, then `degF`, `degC`, and - `degR` are all acceptable input to the validator. Similarly, if `N` is given, `kg * m / s^2` and - `lb * f / s^2` are both acceptable. - -### number - -Example configuration: -``` -validators: - metadatakey: - validators: - - module: SampleService.core.validator.builtin - callable_builder: number - parameters: - keys: ['length', 'width'] - type: int - required: True - gte: 42 - lt: 77 -``` - -Ensures all values are integers or floats. - -* `keys`, which is either a string or a list of strings, determines which keys in the metdata value - map are checked. If omitted, all keys are checked. -* If `required` is specified, the keys in the `keys` list must exist in the metadata value map, - although their value may be `null`. -* `type` specifies that the number or numbers must be integers if set to `int` or any number if - omitted or set to `float` or `null`. -* `gt`, `gte`, `lt`, and `lte` are respectively greater than, greater than or equal, - less than, and less than or equal, and specify a range in which the number or numbers must exist. - If `gt` or `lt` are specified, `gte` or `lte` cannot be specified, respectively, and vice versa. - -### ontology_has_ancestor - -Example configuration: -``` -validators: - metadatakey: - validators: - - module: SampleService.core.validator.builtin - callable-builder: ontology_has_ancestor - parameters: - ontology: 'envo_ontology' - ancestor_term: 'ENVO:00010483' - srv_wiz_url: 'https://kbase.us/services/service_wizard' -``` - -* `ontology` is the ontology that the meta value will be checked against. -* `ancestor_term` is the ancestor ontology term that will be used to check whether meta value has such ancestor or not. -* `srv_wiz_url` is the kbase service wizard url for getting OntologyAPI service. diff --git a/docs/TODO.md b/docs/TODO.md new file mode 100644 index 00000000..689d4585 --- /dev/null +++ b/docs/TODO.md @@ -0,0 +1,66 @@ +# Design +* What are samples called? SampleReplicates? +* Do we need replicate groups? + * Case where samples are functionally subsamples but cannot be produced from the same sample + as the experimental techniques don't allow it. + +# Functionality +* List / find samples, possibly with... +* Search integration +* Logging +* Workspace @sample integration + * If user has access to sample set, should have access to embedded samples (?) +* ACLs: + * cache known good users + * cache user roles + * remove self from acls (read/write) + * change sample owner + * Probably needs request / accept multistep flow +* Cache workspace reponses +* Stand alone validator CLI + * Validate without sending data to server +* Versioning scheme for validator config +* Kafka events + * Improve reliability + * Currently if the service goes down between DB modification for a new link/sample and kafka + reciept of the message the message is lost. + * Could improve reliability of messaging by putting a `sent` field or something like that on + samples / links in the DB, and not updating the field until the kafka send succeeds. + * On startup, look for unsent, older messages and resend. + * Tools to recreate events from the DB (backfill new external DBs, handle cases where + Kafka messages were lost) +* Currently there's no way to list expired links other than setting an effective time on + the from-sample search and from-data search + * Maybe that's enough? + * No way to see the history of the links + * Listing expired links for a sample or data would require sort & paging, but it's not clear + how to page. The obvious fields are the creation / expiration date, but since those are + not necessarily unique, could return up to 10k documents. That makes paging smaller sizes + problematic/impossible. + * Listing expired links for a given sample *and* data is definitely possible since the links + don't overlap in time and can be sorted / paged by the creation date. + * Needs a sample/data/creation index. +* Lots of opportunities for performance improvements if neccessary (bulk reads [and writes, + which are a lot harder]) + +# Concerns: +* Searching for samples could get very expensive based on the queries. + * Maybe just using a Lucene based solution is the way to go. +* Searching for samples may be difficult as the metadata is embedded in the sample node + document which limits the possible indexed queries to some extent. + * Separating out the metadata documents means that traversals querying metadata would be + more complicated or impossible. + * Lucene as above +* If we want more features or constraints, linking data may get more complicated than is already is + +# Testing +* flake8 and bandit on test-sdkless (generated code is poopy) +* When https://github.com/python/mypy/issues/6385 is implemented, ditch all the stupid + `__init__.py` files + +# Misc +* The ~10 documents that have been written about samples + +# Obsolete +* Make kb-sdk test run in travis + * full stack is tested without it so nevermind \ No newline at end of file diff --git a/docs/_old/local-docker.md b/docs/_old/local-docker.md new file mode 100644 index 00000000..560c8dfd --- /dev/null +++ b/docs/_old/local-docker.md @@ -0,0 +1,91 @@ +# Local Docker Development and Deployment + +Due to the sample service's dependencies on other services (Arango DB, Kafka, Zookeeper, and KBase's auth and workspace), it can be rather complex, time-consuming, and unreliable to install and run these dependencies on the host machine. + +To ease this burden, you may use a docker-compose based workflow. + +This workflow: + +- runs real external 3rd party services in containers (Arango, Kafka, Zookeeper) +- runs mock KBase services + +Here is the basic workflow: + +```shell +export MOCK_DATASET_PATH=`pwd`/test/data/mock_services +make host-start-dev-server +``` + +After a few seconds, you should have an operational Sample Service running on http://localhost:5000. + +To close up shop, halt the services with `Ctrl-C` and issue: + +```shell +make host-stop-dev-server +``` + +and then + +```shell +make host-remove-dev-server +``` + +to clean up the containers + +## Port + +The standard port for KBase service containers is `5000`. This is also the default port exposed by the docker container. However, there are cases in which port 5000 is already used. E.g. in macOS Monterey port 5000 is used by AirPlay, in previous versions it may have been used by Bonjour; generally this port is claimed by the "commplex-main" (https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=5000). + +To use a specific port other than 5000, set the `PORT` environment variable. + +E.g. + +```shell +export MOCK_DATASET_PATH=`pwd`/test/data/mock_services +export PORT=5001 +make host-start-dev-server +``` + +## Accessing the Service + +As mentioned above, the development server will not do very much without populating ArangoDB (including some aspects of the Relation Engine) and complementary data for the associated mock services (Workspace, Auth). The dev server was originally set up for testing new methods which provide data from the validation specs, and thus doesn't require the database. + +These methods are not available presently in the Sample Service (they are being prepared in a subsequent pull request). However, the status endpoint does not require the database, and may be successfully invoked: + +```sh +curl -X POST http://localhost:5001/ -s \ + -d '{ +"version": "1.1", +"id": "123", +"method": "SampleService.status", +"params": [] +}' | json_pp +``` + +which results in + +```json +{ + "result" : [ + { + "servertime" : 1641222955761, + "git_commit_hash" : "b362ec800344f7c527ace52d0cc0127d006a731c", + "message" : "", + "version" : "0.1.0", + "git_url" : "git@github.com:kbase/sample_service.git", + "state" : "OK" + } + ], + "id" : "123", + "version" : "1.1" +} +``` + +> if `json_pp` is not available it may be omitted - in this case the JSON will be displayed in a single line, i.e. without indentation. + + +## Status + +This currently works for methods which do not access ArangoDB. That excludes most of the API, so we have work to do!. + +Primarily, the database needs to be populated with example data, and supporting mock data for the workspace and auth as well. diff --git a/docs/adrs/0000-TEMPLATE.md b/docs/adrs/0000-TEMPLATE.md new file mode 100644 index 00000000..74bb98d3 --- /dev/null +++ b/docs/adrs/0000-TEMPLATE.md @@ -0,0 +1,43 @@ +# TITLE HERE + +Date: YYYY-MM-DD + +SUMMARY HERE + +## Author(s) + +@AUTHOR + +## Status + +WHAT ARE STATUSES? + +## Alternatives Considered + +* alt1 +* alt2 + +## Decision Outcome + +DESCRIBE + +## Consequences + +DESCRIBE + +## Pros and Cons of the Alternatives + +### alt1 + +* `+` a pro +* `-` a con + +### alt2 + +* `+` a pro +* `-` a con + +## References + +* [alternative 1](https://www.example.com/) +* [alternative 2](https://www.example.com/) \ No newline at end of file diff --git a/docs/adrs/index.md b/docs/adrs/index.md new file mode 100644 index 00000000..6e8aa656 --- /dev/null +++ b/docs/adrs/index.md @@ -0,0 +1,5 @@ +# Architecture Decision Records (ADRs) + +## Contents + +- [Template](./0000-TEMPLATE.md) \ No newline at end of file diff --git a/docs/api/index.md b/docs/api/index.md new file mode 100644 index 00000000..81e5e9c4 --- /dev/null +++ b/docs/api/index.md @@ -0,0 +1,5 @@ +# API + +The SDK API specification for the service is contained in the `SampleService.spec` file. An indexed +interactive version is +[also available](http://htmlpreview.github.io/?https://github.com/kbaseIncubator/sample_service/blob/master/SampleService.html). \ No newline at end of file diff --git a/docs/configuration.md b/docs/configuration.md new file mode 100644 index 00000000..eeaaa51e --- /dev/null +++ b/docs/configuration.md @@ -0,0 +1,131 @@ +# Configuration + +The server has several startup parameters beyond the standard SDK-provided parameters that must be configured in the Catalog Service by a Catalog Service administrator in order for the service to run. These are documented in the `deploy.cfg` file. + +## Configuration File + +The `deploy.cfg` configuration file contains a key, `metadata-validator-config-repo`, that if provided must be a relative GitHub path that points to a validator configuration GitHub repo. + +Setting `github-token` will help to avoid any rate limiting that may occur (1k/hr vs 60/hr requests.) + +The configuration repo should have chronological releases containing a configuration file. This file's name can be specified with `metadata-validator-config-filename` (`metadata_validation.yml` by default). + +The most recent release from the specified repo will be loaded. If pre-releases should also be included, set the `metadata-validator-config-prerelease` config variable to 'true'. + +A direct file URL override can also be provided with the `metadata-validator-config-url` key. With this form, the url begins with `file://`, followed by a path to the directory containing the validation config file, which should be named `metadata_validation.yml` (unless overridden as described above.) This is utilized by tests. + +The configuration file is loaded on service startup and used to configure the metadata validators. If changes are made to the configuration file the service must be restarted to reconfigure the validators. + +The configuration file uses the YAML format and is validated against the following JSONSchema: + +```json +{ + "type": "object", + "definitions": { + "validator_set": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "key_metadata": { + "type": "object", + "additionalProperties": { + "type": [ + "number", + "boolean", + "string", + "null" + ] + } + }, + "validators": { + "type": "array", + "items": { + "type": "object", + "properties": { + "module": { + "type": "string" + }, + "callable_builder": { + "type": "string" + }, + "parameters": { + "type": "object" + } + }, + "additionalProperties": false, + "required": [ + "module", + "callable_builder" + ] + } + } + }, + "required": [ + "validators" + ] + } + }, + "additionalProperties": false + }, + "properties": { + "validators": { + "$ref": "#/definitions/validator_set" + }, + "prefix_validators": { + "$ref": "#/definitions/validator_set" + } + }, + "additionalProperties": false +} +``` + +The configuration consists of a mapping of standard and prefix metadata keys to a further mapping of metadata key properties, including the list of validator specifications and static metadata about the key. Each validator is run against the metadata value in order. The `module` key is a python import path for the module containing a builder function for the validator, while the `callable_builder` key is the name of the function within the module that can be called to create the validator. `parameters` contains a mapping that is passed directly to the callable builder. The builder is expected to return a callable with the call signature as described previously. + +A simple configuration might look like: + +```yaml +validators: + foo: + validators: + - module: SampleService.core.validator.builtin + callable_builder: noop + key_metadata: + description: test key + semantics: none really + stringlen: + validators: + - module: SampleService.core.validator.builtin + callable_builder: string + parameters: + max-len: 5 + - module: SampleService.core.validator.builtin + callable_builder: string + parameters: + keys: spcky + max-len: 2 + key_metadata: + description: check that no strings are longer than 5 characters and spcky is <2 +prefix_validators: + gene_ontology_: + validators: + - module: geneontology.plugins.kbase + callable_builder: go_builder + parameters: + url: https://fake.go.service.org/api/go + apitoken: abcdefg-hijklmnop + key_metadata: + description: The key value contains a GO ontology ID that is linked to the sample. + go_url: https://fake.go.service.org/api/go + date_added_to_service: 2020/3/8 +``` + +In this case any value for the `foo` key is allowed, as the `noop` validator is assigned to the key. Note that if no validator was assigned to `foo`, including that key in the metadata would cause a validation error. The `stringlen` key has two validators assigned and any metadata under that key must pass both validators. + +The first validator ensures that no keys or value strings in in the metadata map are longer than 5 characters, and the second ensures that the value of the `spcky` key is a string of no more than two characters. See the documentation for the `string` validator (below) for more information. + +> TODO: we are not using prefix validators; should not encourage their use? + +Finally, the wholly fabricated `gene_ontology_` prefix validator will match **any** key starting with `gene_ontology_`. The validator code might look up the suffix of the key, say `GO_0099593`, at the provided url to ensure the suffix matches a legitimate ontology term. Without a prefix validator, a validator would have to be written for each individual ontology term, which is infeasible. + +All the metadata keys have static metadata describing the semantics of the keys and other properties that service users might need to properly use the keys. diff --git a/docs/design/built-in-validators.md b/docs/design/built-in-validators.md new file mode 100644 index 00000000..5dab110a --- /dev/null +++ b/docs/design/built-in-validators.md @@ -0,0 +1,133 @@ +# Built-In Validators + +All built in validators are in the `SampleService.core.validator.builtin` module. + +## noop + +Example configuration: + +```yaml +validators: + metadatakey: + validators: + - module: SampleService.core.validator.builtin + callable_builder: noop +``` + +This validator accepts any and all values. + +## string + +Example configuration: + +```yaml +validators: + metadatakey: + validators: + - module: SampleService.core.validator.builtin + callable_builder: string + parameters: + keys: ['key1', 'key2'] + required: True + max-len: 10 +``` + +* `keys` is either a string or a list of strings and determines which keys will be checked by the + validator. If the key exists, its value must be a string or `None` (`null` in JSON-speak). +* `required` requires any keys in the `keys` field to exist in the map, although their value may + still be `None`. +* `max-len` determines the maximum length in characters of the values of the keys listed in `keys`. + If `keys` is not supplied, then it determines the maximum length of all keys and string values + in the metadata value map. + +## enum + +Example configuration: + +```yaml +validators: + metadatakey: + validators: + - module: SampleService.core.validator.builtin + callable_builder: enum + parameters: + keys: ['key1', 'key2'] + allowed-values: ['red', 'blue', 'green] +``` + +* `allowed-values` is a list of primitives - strings, integers, floats, or booleans - that are + allowed metadata values. If `keys` is not supplied, all values in the metadata value mapping must + be one of the allowed values. +* `keys` is either a string or a list of strings and determines which keys will be checked by the + validator. The key must exist and its value must be one of the `allowed-values`. + +## units + +Example configuration: + +```yaml +validators: + metadatakey: + validators: + - module: SampleService.core.validator.builtin + callable_builder: units + parameters: + key: 'units' + units: 'mg/L' +``` + +* `key` is the metadata value key that will be checked against the `units` specification. +* `units` is a **unit specification in the form of an example**. Any units that can be converted + to the given units will be accepted. For example, if `units` is `K`, then `degF`, `degC`, and + `degR` are all acceptable input to the validator. Similarly, if `N` is given, `kg * m / s^2` and + `lb * f / s^2` are both acceptable. + +## number + +Example configuration: + +```yaml +validators: + metadatakey: + validators: + - module: SampleService.core.validator.builtin + callable_builder: number + parameters: + keys: ['length', 'width'] + type: int + required: True + gte: 42 + lt: 77 +``` + +Ensures all values are integers or floats. + +* `keys`, which is either a string or a list of strings, determines which keys in the metadata value + map are checked. If omitted, all keys are checked. +* If `required` is specified, the keys in the `keys` list must exist in the metadata value map, + although their value may be `null`. +* `type` specifies that the number or numbers must be integers if set to `int` or any number if + omitted or set to `float` or `null`. +* `gt`, `gte`, `lt`, and `lte` are respectively greater than, greater than or equal, + less than, and less than or equal, and specify a range in which the number or numbers must exist. + If `gt` or `lt` are specified, `gte` or `lte` cannot be specified, respectively, and vice versa. + +## ontology_has_ancestor + +Example configuration: + +```yaml +validators: + metadatakey: + validators: + - module: SampleService.core.validator.builtin + callable-builder: ontology_has_ancestor + parameters: + ontology: 'envo_ontology' + ancestor_term: 'ENVO:00010483' + srv_wiz_url: 'https://kbase.us/services/service_wizard' +``` + +* `ontology` is the ontology that the meta value will be checked against. +* `ancestor_term` is the ancestor ontology term that will be used to check whether meta value has such ancestor or not. +* `srv_wiz_url` is the kbase service wizard url for getting OntologyAPI service. \ No newline at end of file diff --git a/docs/design/errors.md b/docs/design/errors.md new file mode 100644 index 00000000..7195b421 --- /dev/null +++ b/docs/design/errors.md @@ -0,0 +1,49 @@ +# Errors + +Error messages returned from the API may be general errors without a specific structure to +the error string or messages that have error codes embedded in the error string. The latter +*usually* indicate that the user/client has sent bad input, while the former indicate a server +error. A message with an error code has the following structure: + +```text +Sample service error code : +``` + +There is a 1:1 mapping from error code to error type; error type is simply a more readable +version of the error code. The error type **may change** for an error code, but the error code +for a specific error will not. + +The current error codes are: + +| Code | Message | Meaning | +|------|---------|----------| +| 20000 | Unauthorized | | | +| 30000 | Missing input parameter | | +| 30001 | Illegal input parameter | | +| 30010 | Metadata validation failed | | +| 40000 | Concurrency violation | | +| 50000 | No such user | | +| 50010 | No such sample | | +| 50020 | No such sample version | | +| 50030 | No such sample node | | +| 50050 | No such data link | | +| 60000 | Data link exists for data ID | | +| 60010 | Too many data links | | +| 100000 | unsupported operation | | + +## Generic JSON-RPC Errors + +Errors with the form of the request, or the programming of a method, may result in "standard" JSON-RPC errors. + +The word *standard* is in quotes because this service utilizes [JSON-RPC 1.1](https://jsonrpc.org/historical/json-rpc-1-1-wd.html), which never actually settled on standard error codes (and was never actually released as a JSON-RPC standard). Rather, KBase utilizes error codes from [JSON-RPC 2.0](https://www.jsonrpc.org/specification). + +The error codes are: + +| Code | Message | Meaning | +|------|---------|----------| +| -32700 | Parse error | Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text. | +| -32600 | Invalid Request | The JSON sent is not a valid Request object. | +| -32601 | Method not found | The method does not exist / is not available. | +| -32602 | Invalid params | Invalid method parameter(s). | +| -32603 | Internal error | Internal JSON-RPC error. | +| -32000 to -32099| Server error | Reserved for implementation-defined server-errors. | diff --git a/docs/design/implementation_notes.md b/docs/design/implementation_notes.md new file mode 100644 index 00000000..290d1e67 --- /dev/null +++ b/docs/design/implementation_notes.md @@ -0,0 +1,147 @@ +# Relevant ArangoDB documentation + +* Transactions: https://www.arangodb.com/docs/stable/transactions.html +* Write conflicts: https://github.com/arangodb/arangodb/issues/9430 +* Transaction failures: https://github.com/arangodb/arangodb/issues/11424 +* Sorting graph traversal results: https://github.com/arangodb/arangodb/issues/11260 + +# Data links + +## Deleted objects / workspaces + +* Currently links to deleted objects can be returned from `get_links_from_sample`. + * Should this be changed? It means an extra workspace call. + * It also has reproducibility issues - calls to the method with the same `effective_time` may + not produce the same results. + * That being said, changing permissions to workspaces can also change what links are returned + over time. + * If we don't return links to deleted objects, should the links be autoexpired if they aren't + already? + * This assumes `get_object_info3` with `ignoreErrors: 1` will only return `null` for deleted + objects when called via `administer` - verify + * What about expired links to deleted objects with an `effective_time` in the past? Return them? + +* Links to deleted objects can be expired as long as the user has write access to the workspace. + However, links to objects in deleted workspaces **cannot** be expired by anyone, including + admins, given the current implementation. + * This naively seems ok since the links aren't accessible by anyone other than admins. + +## Creating / updating links + +### 10k link limit + +* The Sample Service allows no more than 10k non-expired links from any one version of a sample or + from any one version of an object. That means that a single object version can have no more + than 10k data IDs (e.g. column names for matrix data). +* This requirement was originally agreed upon because there appears to be no way to + [efficiently sort and page results with graph queries in ArangoDB](https://github.com/arangodb/arangodb/issues/11260). + Allowing the collection to grow without limit means that eventually sorted graph queries will + OOM / hog CPU on the database (or be consistently killed if the DB has that capability). 10K + is small enough that the results can be sorted in a small amount of memory in the DB, + application, or UI. +* Link lookups are currently implemented without graph traverals and so in theory the + 10K limit could be lifted. + * Would need sort / paging / indexes. As usual, paging needs to be based on some aspect of + the link that is unique, which is tricky here +* HOWEVER - if any of the query parameters or expectations change the limit may have to be + reinstated, e.g. + * Changes to how the search regards ACLs. + * Searching on additional properties, e.g. + * Workspace object properties + * Sample properties + +### Implementation notes + +* Since multiple clients may be creating, updating, or expiring links on the same sample + or data object simultaneously, the code needs to account for possible race conditions on + those operations. +* Links are immutable once created, *except* that they can be expired. +* The unique ID of a link in the database is a fn of the data unit ID (e.g. + workspace UPA + data id) for an unexpired link, and the DUID + created time for expired links. + This ensures there's only one non-expired link per DUID in the DB. + +### Implementation + +* Parameters: `new_link`, `update` boolean indicating `current_link` should be replaced if it + exists +* Start a transaction with a collection exclusive lock. + * This is required since we're counting multiple documents. Allowing other writes while the + transaction is in progress will make those counts inaccurate. +* Fetch the `current_link` for the data unit ID, if any +* If `current_link`: + * If not `update`: fail + * If `current_link` == `new_link`: abort transaction and return (no-op) + * If `new_link` is to a different sample and count_links(`new_link.Sample`) > 10K: fail + * Link look up is based on the data, so we know it's to the same UPA, and since we're + expiring and replacing a link the link count for the UPA doesn't change. + * Expire and save `current_link` + * Creates a new ArangoDB document with a new `_key` +* Else: + * If count_links(`new_link.UPA`) > 10K: fail + * If count_links(`new_link.Sample`) > 10K: fail +* Save `new_link` +* Complete the transaction. + +### Extant failure modes + +* ArangoDB transactions can fail on one node and succeed on another. This will commit the + changes that succeeded but cause the transaction as a whole to fail client-side. This means + in theory the client could determine the current state of the DB and try to repair any + inconsistencies, but in practice this is very complicated. + * A link could be expired without the current link being updated, effectively leaving an + expired and current version of the same link. If this link were to be expired again an + error would occur and the DB would have to be manually corrected. + * A link could be updated without the prior link being expired, effectively causing the record + of the prior link to disappear. + +## Expiring links + +### Implementation notes + +* See the implementation notes for creating / updating links above. +* Arango does not support atomically changing a document's `_key`. Since expiring a link + means changing the `_key`, we use a transaction to reduce the possibility of inconsistent + database state. + * But does a transaction really help? + +### Implementation + +* Parameters: `duid` - the data unit ID +* Fetch `current_link` from the DB via the `duid`. +* If not `current_link`: fail +* Start a transaction. +* Expire `current_link` and save. + * Creates a new ArangoDB document with a new `_key` + * Fail if a duplicate key error occurs, meaning the link was expired after fetching the document. +* Delete the old `current_link` document. +* Complete the transaction. + +### Extant failure modes + +* ArangoDB transactions can fail on one node and succeed on another. This will commit the + changes that succeeded but cause the transaction as a whole to fail client-side. This means + in theory the client could determine the current state of the DB and try to repair any + inconsistencies, but in practice this is very complicated. + * A link could be expired without the current link being deleted, effectively leaving an + expired and current version of the same link. If this link were to be expired again an + error would occur and the DB would have to be manually corrected. + * A link could be deleted without the expired document being written, destroying the link's + history. +* Since expiration does not use an exclusive lock, it is possible for other writes to collide + with the expired link document and cause the write to fail. + * It is not clear if this will + [cause the transaction as a whole to fail](https://github.com/arangodb/arangodb/issues/11424). +* If the delete fails, an error will be raised and the transaction will be aborted. + * Funnily enough, there is an `ignore_missing` parameter, but from the `python-arango` + documentation: + ``` + :param ignore_missing: Do not raise an exception on missing document. + This parameter has no effect in transactions where an exception is + always raised on failures. + ``` + * This could be caused by: + * Another thread expiring and deleting the link, in which case no further action is necessary. + * Another thread expiring and updating the link, in which case the current operation should + not expire the new link. + * This error takes split second timing and is highly unlikely to occur, and should not + leave the database in an inconsistent state. diff --git a/docs/design/kafka.md b/docs/design/kafka.md new file mode 100644 index 00000000..bd174276 --- /dev/null +++ b/docs/design/kafka.md @@ -0,0 +1,41 @@ +# Kafka + +The server may be configured to send notifications on events to Kafka - see the `deploy.cfg` file +for information. The events and their respective JSON message formats are: + +## New sample or sample version + +```json +{ + "event_type": "NEW_SAMPLE", + "sample_id": "", + "sample_ver": "" + } +``` + +## Sample ACL change + +```json +{ + "event_type": "ACL_CHANGE", + "sample_id": "" + } +``` + +## New data link + +```json +{ + "event_type": "NEW_LINK", + "link_id": "" + } +``` + +## Expired data link + +```json +{ + "event_type": "EXPIRED_LINK", + "link_id": "" + } +``` diff --git a/docs/design/link_ws_data_to_sample.md b/docs/design/link_ws_data_to_sample.md new file mode 100644 index 00000000..01eb6a59 --- /dev/null +++ b/docs/design/link_ws_data_to_sample.md @@ -0,0 +1,60 @@ +# Linking workspace data to samples + +## Document purpose + +Provide one or more design options for linking data in the KBase Workspace Service to +samples stored in the KBase Sample Service. + +## Definitions + +* SS - Sample Service +* WSS - Workspace Service +* RE - Relation Engine + +## General design considerations + +* A user having access to a sample **does not** mean they necessarily have access to data linked + to that sample. They must have explicit workspace permissions for the data. +* A user having access to data linked to a sample **does** have access to the sample. +* When creating a new version of a sample, data links are not automatically updated. + * This could be a feature in the future, either automatically or on request. +* Data can only be linked to a single sample. + * Although it can be linked to multiple versions of the same sample. + +## Options + +### 1. Links are managed by the SS / Relation Engine + +* Link requests go to the SS, which + * Checks that the user has explicit access to the sample and the WSS data. + * Creates a link from the RE WSS shadow object representing the data to a node in the sample. +* Metadata about the link could be stored in the RE DB, such as denoting a column in the data + object that is linked to the sample, rather than the entire data object. +* RE graph traversals can be used to find samples from linked data and vice versa. + +#### Implications + +* Data copies are not linked to the Sample. +* The WSS knows nothing about data <-> sample linkages. + +### 2. Links are managed by WSS Data types + +* An `@sample` (or something) annotation is added to the WSS. When the WSS typechecks a data + object containing the annotation, it looks up the sample in the SS and ensures the user has + explicit access to the sample. +* If RE queries from data <-> sample are required, the RE indexer would need to be updated + to add appropriate links for each data type with the `@sample` annotation. +* When requesting a sample via linked data, the SS will need to check that the data in the WSS + contains an appropriate link to the sample. + +#### Implications +* Every sample associated data type needs to be updated to contain at least one `@sample` + annotation. +* Data types with columns, etc. may require many annotations, which could severely slow down + saves. +* The data will continue to be linked to the sample on a copy. +* A new version of data must be saved to add or update links. + +## Decision + +On 2020/1/28, the decision was made to go with option 1 by the KBase APS Samples group. diff --git a/docs/design/link_ws_data_to_sample_in_RE.md b/docs/design/link_ws_data_to_sample_in_RE.md new file mode 100644 index 00000000..e2f76fda --- /dev/null +++ b/docs/design/link_ws_data_to_sample_in_RE.md @@ -0,0 +1,128 @@ +# Sample Service / Relation Engine data linking design document + +## Background + +See [link_ws_data_to_sample.md](link_ws_data_to_sample.md). + +## Document purpose + +Flesh out Option 1 of the Sample Service data linking options, e.g. link data to samples +in the RE database, not via workspace annotations. + +## General design considerations + +* A user having access to a sample **does not** mean they necessarily have access to data linked + to that sample. They must have explicit workspace permissions for the data. +* A user having access to data linked to a sample **does** have read access to the sample. +* When creating a new version of a sample, data links are not automatically updated. + * This could be a feature in the future, either automatically or on request. +* A particular data unit can be linked to only one sample. + * A workspace object may contain multiple data units - a matrix containing data from many + samples, for example. + * The data unit can be linked to multiple versions of the sample + +## Definitions + +* SS - Sample Service +* WSS - Workspace Service +* RE - Relation Engine +* SIDV - Sample ID and version. The ID of the sample and version of the sample. Omitting the + version indicates the most recent version should be used, but this is obviously subject to + race conditions. +* UPA - Unique Permanent Address. A unique identifier for an object in the workspace. +* Data unit - A cohesive unit of data taken from a single sample. A workspace object may contain + many data units. +* DUID - Data Unit ID. A unique identifier for a data unit - an UPA and optionally an identifer for + data within the data object. + +## Operations + +### Link data to a sample + +1. Make request to SS with the SIDV and DUID. + * May want a bulk method, especially for linking columns of a matrix to multiple samples. + * May need to associate metadata with the link, e.g. denoting to which column of a matrix + the link refers. +2. SS checks that the user has admin access to the sample. + * Links from data -> sample grant read permission to the sample, and thus creating links + is equivalent to having admin privileges for the sample. + * **OPEN QUESTION**: Do we want an explicit link data permission or is admin ok? + * For now just use admin. + * **OPEN QUESTION**: Should link data perms implictly grant write perms? If not, + permissions become non-monotonic, which is unfortunate. + * SampleSets do not affect whether a user can link data to the samples contained therein. +3. SS checks that the user has X permission to the data. + * **OPEN QUESTION**: What permission is required for data in order to link it to a sample? + * Links grant no special privileges for linked data. + * What if another stakeholder of the data doesn't want the data linked? + * Perhaps write or admin access should be required. + * Since this effectively modifies the data, require write permissions for now. +4. SS adds a link from the WSS shadow object in the RE to the appropriate node in the sample. + * SS checks that the object has no more than 10K links to samples and the sample has no more + than 10K links to objects + * See [Slack conversation](https://kbase.slack.com/archives/CNRT78G66/p1583968517059500) + * This probably requires a transaction to ensure the data unit is not linked to any other + samples or other nodes in the same sample as well as the above. + * It can be linked to other versions of the same sample. + * In this case, the old link should be expired (time traveling). + * **OPEN QUESTION**: Should the SS verify the data unit ID somehow? That seems really + expensive and really complicated - would need a verifier for each type or the + types would have to put the IDs in a standard location in the JSON. + * Don't verify for now, complicated and expensive. + +### Update or delete a link +1. Essentially the same steps as linking data except: + * The older version of the link should be expired. + * The 10K limit doesn't apply. + * This can be implemented last. + +### View data linked to a sample + +1. Make a request to the SS with the SIDV and optionally a timestamp for time travelling queries. +2. The SS checks that the user has read access to the sample. +3. The SS gets the list of workspaces to which the user has read access from the WSS. +4. The SS performs a traversal from the version node in the sample to WSS shadow objects where the + workspace ID is in the list of accessible workspaces. +5. The SS returns the list of UPAs. + * This list is limited to 10K objects (see above) and so may be returned in bulk or sorted + without major cpu or memory concerns. + * **OPEN QUESTION** May also want to query on workspace object properties. Node indexes on + these properties could speed up the query. + * Don't support for now. + +### View samples linked from data + +1. Make a request to the SS with the DUID of the data and optionally a timestamp for time + travelling queries. +2. The SS checks that the user has read access to the UPA. +3. The SS performs a traversal from the WSS shadow object in the RE through connected sample nodes + to the sample tree root. + * **OPEN QUESTION** May want to query on sample metadata. + * May need to restructure the sample metadata to make this possible. + * IIUC, only equality queries can be done on arrays of documents when using an index. + * Maybe not using an index is ok. + * On the other hand, if we separate metadata into separate documents that's going to make + the document count explode and traversals may not be possible. + * How does the metadata of parent nodes of the linked node in the sample affect the query? + * Is metadata inherited? Should we duplicate parent metadata to children in the DB? + * Don't support for now. + * This list is limited to 10K objects (see above) and so may be returned in bulk or sorted + without major cpu or memory concerns. + * **OPEN QUESTiON** Exclude all but the latest sample version? + * Not sure if this is possible in query or needs to be done in the server + * Support a toggle in the API + +### Other operations + +* Missing any? + +### More complex query examples + +* Given a taxon and a sample, find all WSS objects that are linked to both +* Find all genomes with a specific gene linked to sample sets in a subset of workspaces. + +## Design implications + +* If a WSS object linked to a sample is copied, the copy will not be linked to the sample. + + diff --git a/docs/design/validation.md b/docs/design/validation.md new file mode 100644 index 00000000..2b90284d --- /dev/null +++ b/docs/design/validation.md @@ -0,0 +1,151 @@ +# Validation + +Each node in the sample tree accepted by the `create_sample` method may contain controlled and +user metadata. User metadata is not validated other than very basic size checks, while controlled +metadata is validated based on configured validation rules. + +## All metadata + +For all metadata, map keys are are limited to 256 characters and values are limited to 1024 +characters. Keys may not contain any control characters, while values may contain tabs and +new lines. + +## Controlled metadata + +Controlled metadata is subject to validation - no metadata is allowed that does not pass +validation or does not have a validator assigned. + +Metadata validators are modular and can be added to the service via configuration without +changing the service core code. Multiple validators can be assigned to each metadata key. + +Sample metadata has the following structure (also see the service spec file): + +```json +{ + "metadata_key_1": { + "metadata_value_key_1_1": "metadata_value_1_1", + "metadata_value_key_1_N": "metadata_value_1_N", + }, + "metadata_key_N": { + "metadata_value_key_N_1": "metadata_value_N_1", + "metadata_value_key_N_N": "metadata_value_N_N", + } +} +``` + +Metadata values are primitives: a string, float, integer, or boolean. + +A simple example: + +```json +{"temperature": {"measurement": 1.0, + "units": "Kelvin" + }, + "location": {"name": "Castle Geyser", + "lat": 44.463816, + "long": -110.836471 + } +} +``` + +In this case, a validator would need to be assigned to the `temperature` and `location` +metadata keys. Validators are `python` callables that accept the key and the value of the key as +callable parameters. E.g. in the case of the `temperature` key, the arguments to the function +would be: + +```json +("temperature", {"measurement": 1.0, "units": "Kelvin"}) +``` + +If the metadata is incorrect, the validator should return an error message as a string. Otherwise +it should return `None` unless the validator cannot validate the metadata due to some +uncontrollable error (e.g. it can't connect to an external server after a reasonable timeout), +in which case it should throw an exception. + + Validators are built by a builder function specified in the configuration (see below). + The builder is passed any parameters specified in the configuration as a + mapping. This allows the builder function to set up any necessary state for the validator + before returning the validator for use. Examine the validators in +`SampleService.core.validator.builtin` for examples. A very simple example might be: + + ```python + def enum_builder(params: Dict[str, str] + ) -> Callable[[str, Dict[str, Union[float, int, bool, str]]], Optional[str]]: + # should handle errors better here + enums = set(params['enums']) + valuekey = params['key'] + + def validate_enum(key: str, value: Dict[str, Union[float, int, bool, str]]) -> Optional[str]: + # key parameter not needed in this case + if value.get(valuekey) not in enums: + return f'Illegal value for key {valuekey}: {value.get(valuekey)}' + return None + + return validate_enum +``` + +## Prefix validators + +The sample service supports a special class of validators that will validate any keys that match +a specified prefix, as opposed to standard validators that only validate keys that match exactly. +Otherwise they behave similarly to standard validators except the validator function signature is: + +```python +(prefix, key, value) +``` + +For the temperature example above, if the prefix for the validator was `temp`, the arguments +would be + +```python +("temp", "temperature", {"measurement": 1.0, "units": "Kelvin"}) +``` + +A particular metadata key can match one standard validator key (which may have many +validators associated with it) and up to `n` prefix validator keys, where `n` is the length of the +key in characters. Like standard metadata keys, prefix validator keys may have multiple +validators associated with them. The validators are run in the order of the list for a particular +prefix key, but the order the matching prefix keys are run against the metadata key is not +specified. + +A toy example of a prefix validators builder function might be: + +```python +def chemical_species_builder(params: Dict[str, str] + ) -> Callable[[Dict[str, str, Union[float, int, bool, str]]], Optional[str]]: + # or contact an external db or whatever + chem_db = setup_sqlite_db_wrapper(params['sqlite_file']) + valuekey = params['key'] + + def validate_cs(prefix: str, key: str, value: Dict[str, Union[float, int, bool, str]] + ) -> Optional[str]: + species = key[len(prefix):] + if value[valuekey] != species: + return f'Species in key {species} does not match species in value {value[valuekey]}' + if not chem_db.find_chem_species(species): + return f'No such chemical species: {species} + return None + + return validate_cs +``` + +## Source metadata + +In some cases, metadata at the data source may be transformed prior to ingest into the +Sample Service - for instance, two samples from different sources may be associated with +metadata items that are semantically equivalent but have different names and are represented in +different units. Prior to storage in the Sample Service, those items may be transformed to use +the same metadata key and representation for the value. + +The Sample Service allows storing these source keys and values along with the controlled +metadata such that the original metadata may be reconstructed. The data is not validated other +than basic size checks and is stored on an informational basis only. + +See the API specification for more details. + +## Static key metadata + +A service administrator can define metadata associated with the metadata keys - e.g. metadata +*about* the keys. This might include a text definition, semantic information about the key, +an ontology ID if the key represents a particular node in an ontology, etc. This metadata is +defined in the validator configuration file (see below) and is accessible via the service API. diff --git a/docs/development/from-another-module.md b/docs/development/from-another-module.md new file mode 100644 index 00000000..3eb9c9f0 --- /dev/null +++ b/docs/development/from-another-module.md @@ -0,0 +1,8 @@ + +# Installation from another module + +To use this code in another SDK module, call `kb-sdk install SampleService` in the other module's root directory. + +## Help + +You may find the answers to your questions in our [FAQ](https://kbase.github.io/kb_sdk_docs/references/questions_and_answers.html) or [Troubleshooting Guide](https://kbase.github.io/kb_sdk_docs/references/troubleshooting.html). \ No newline at end of file diff --git a/docs/using-development-docker-compose.md b/docs/development/local-docker.md similarity index 99% rename from docs/using-development-docker-compose.md rename to docs/development/local-docker.md index da4f6f83..75193a95 100644 --- a/docs/using-development-docker-compose.md +++ b/docs/development/local-docker.md @@ -1,4 +1,4 @@ -# Using Docker Compose for Local Development +lo# Using Docker Compose for Local Development Docker compose can be very useful as a development platform. It obviates the need to install the sample service dependencies directly on your host machine. diff --git a/docs/development/mypy.md b/docs/development/mypy.md new file mode 100644 index 00000000..0265815a --- /dev/null +++ b/docs/development/mypy.md @@ -0,0 +1,3 @@ +# MyPy + +> Use this section to explain usage of mypy in this project. \ No newline at end of file diff --git a/docs/development/using-kb-sdk.md b/docs/development/using-kb-sdk.md new file mode 100644 index 00000000..ca60fd91 --- /dev/null +++ b/docs/development/using-kb-sdk.md @@ -0,0 +1,57 @@ +# Using `kb_sdk` with this repo + +The `sample_service` is based on the code layout and structure established by initializing and managing a codebase with the [KBase App SDK (`kb_sdk`)](https://github.com/kbase/kb_sdk). + +It does not adhere strictly to `kb_sdk` practices. + +This document describes, in a nutshell, current practice. + +> Note that the "KBase App SDK" is known, interchangeably, as `kb_sdk`, which is the name of the repo, and `kb-sdk`, which is the name of the command and the image. + +## Differences + +### Compilation + +This is a Python project, so there is no real code compilation. However, the "compile" command, as configured in the project's `Makefile` and implemented in `kb-sdk`, does more than compile a project which requires compilation. It also generates code. + +Typically, a `kb_sdk` service is maintained by updating the "spec file" (`SampleService.spec`) and then running `make compile`. This would: + +1. create core utility library files `lib/SampleService/authclient.py`, `lib/SampleService/baseclient.py` +2. add, modify, or remove method stubs to `lib/SampleService/SampleServiceImpl.py`, depending on changes to the spec file +3. create the main entrypoint `lib/SampleServiceServer.py`, overwriting the existing file if any +4. create the spec documentation page `SampleService.html`, overwriting the existing file if any + +In this repo, (3) is omitted. See the `Makefile` for how this was done. The Server file needs to be maintained by hand. + +The main server entrypoint is `lib/SampleService/SampleServiceServer.py`, rather than `lib/SampleServiceServer.py`. + +### Testing + +Typically a `kb-sdk` project runs tests through `kb-sdk`, which manages invocation of the tests via a container using an image built from the project's `Dockerfile` and utilizes conventions for directories, configuration, etc. + +In this project, the limitations of that test environment preclude using that test framework. + +Rather, tests are run via `make test-sdkless`. + +## Using `kb-sdk` + +The `kb-sdk` command is made available through a docker container, which uses an image based on the latest release of `kb_sdk`. + +You can consult the [KBase SDK Docs](https://kbase.github.io/kb_sdk_docs/tutorial/2_install.html) for the official installation procedure, or follow these somewhat simpler and less intrusive instructions: + +- install `kb-sdk`: + - `make install-sdk` +- following the instructions printed to the console, adjust the path in your shell: + - export PATH=$PWD:$PATH + +The typical workflow does not use `kb-sdk` directly. + +The primary current usage of `kb-sdk` in this project is compilation, as briefly described above. + +The following command: + +```sh +make compile +``` + +will run the compilation. diff --git a/docs/using-pipenv.md b/docs/development/using-pipenv.md similarity index 97% rename from docs/using-pipenv.md rename to docs/development/using-pipenv.md index 60bcd0a2..6cfd9962 100644 --- a/docs/using-pipenv.md +++ b/docs/development/using-pipenv.md @@ -38,6 +38,8 @@ This section describes how to get `pipenv` up and running on macOS. These instru `pipenv` will be installed by `pip` into `~/Library/Python/3.7/lib/python/site-packages` (module) and `~/Library/Python/3.7/bin` (executable). + It will be available to your host user account only. + - ensure `pipenv` is runnable: If you look for `pipenv` from the command line, you'll find it is not found: @@ -134,4 +136,4 @@ within the directory in which you ran `pipenv` previously. - Paste in the copied path and hit Return - +- You should have have a fully functioning Python development setup for VSC! diff --git a/docs/diagrams/system-context.puml b/docs/diagrams/system-context.puml new file mode 100644 index 00000000..765125b6 --- /dev/null +++ b/docs/diagrams/system-context.puml @@ -0,0 +1,53 @@ +@startuml system-context +!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml + + + +System_Boundary(hostComputer, "User's Computer") { + Container(samples, "Raw Samples") + Container(browser, "Web Browser") +} + +System_Boundary(kbase_environment, "KBase Environment") { + Container(sampleService, "Sample Service", "The Sample Service") + ContainerDb(arangoDb, "Arango DB", "database") + ContainerQueue(kafka, "Kafka", "event streaming") + Container(zookeeper, "Zookeeper", "configuration ") + Container(workspace, "Workspace", "Narratives, SampleSets") + Container(auth, "Auth Service", "authentication") + Container(importApp, "Import App", "import samples") + Container(stagingService, "Staging Service", "contains raw samples") + Container(relationEngine, "Relation Engine", "shadow objects") +} + +System_Boundary(github, "GitHub") { + Container(sampleSpecs, "Sample Specs") +} + + +Rel(browser, samples , "accesses") +Rel(browser, stagingService, "uploads samples") +Rel(importApp, stagingService, "accesses files") + +' Relations for browser apps +Rel(browser, importApp, "calls") +Rel(browser, sampleService, "calls") +Rel(browser, workspace, "calls") + + +' Relations for calls +Rel(sampleService, arangoDb, "calls", "net") +Rel(sampleService, kafka, "calls", "net") +Rel(kafka, zookeeper, "calls", "net") +Rel(sampleService, workspace, "calls", "net, JSON-RPC 1.1") +Rel(sampleService, auth, "calls", "net, REST") +Rel(importApp, sampleService, "calls") +Rel(relationEngine, arangoDb, "calls", "net") + +' Relations for GitHub Access +Rel(sampleService, sampleSpecs, "accesses") +Rel(importApp, sampleSpecs, "accesses") + + + +@enduml \ No newline at end of file diff --git a/docs/diagrams/system-overview.puml b/docs/diagrams/system-overview.puml new file mode 100644 index 00000000..3c905e76 --- /dev/null +++ b/docs/diagrams/system-overview.puml @@ -0,0 +1,59 @@ +@startuml system-overview + +!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml + +System_Boundary(userland, "Userland") { + Person(user, "KBase User") +} + +System_Boundary(browser, "Web Browser") { + Container(narrative, "Narrative") + Container(kbaseui, "KBase UI") +} + +System_Boundary(hostComputer, "User's Computer") { + Container(samples, "Raw Samples") +} + +System_Boundary(kbase_environment, "KBase Environment") { + Container(sampleService, "Sample Service", "The Sample Service") + ContainerDb(arangoDb, "Arango DB", "database") + ContainerQueue(kafka, "Kafka", "event streaming") + Container(zookeeper, "Zookeeper", "configuration ") + Container(workspace, "Workspace", "Narratives, SampleSets") + Container(auth, "Auth Service", "authentication") + Container(importApp, "Import App", "import samples") + Container(stagingService, "Staging Service", "contains raw samples") +} + +' Relations for user +Rel(user, narrative, "uses") +Rel(user, kbaseui, "uses") + +' Samples and importing +Rel(user, samples, "creates, edits") +Rel(narrative, samples , "uploads") +Rel(narrative, stagingService, "uploadeds") + +' Relations for browser apps +Rel(narrative, sampleService, "calls") +Rel(narrative, workspace, "calls") +Rel(narrative, importApp, "calls") + +Rel(kbaseui, sampleService, "calls") +Rel(kbaseui, workspace, "calls") + + +' Relations for calls +Rel(sampleService, arangoDb, "calls", "net") +Rel(sampleService, kafka, "calls", "net") +Rel(kafka, zookeeper, "calls", "net") +Rel(sampleService, workspace, "calls", "net, JSON-RPC 1.1") +Rel(sampleService, auth, "calls", "net, REST") +Rel(importApp, sampleService, "calls") + + + + + +@enduml \ No newline at end of file diff --git a/docs/documentation/diagrams.md b/docs/documentation/diagrams.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/documentation/index.md b/docs/documentation/index.md new file mode 100644 index 00000000..4b8d78c4 --- /dev/null +++ b/docs/documentation/index.md @@ -0,0 +1,33 @@ +# Documentation + +Documentation in this repo covers the development, operation, and design of the Sample Service. It may contain some information about other KBase or 3rd party systems as they relate to the Sample Service. + +It does not cover: +- user documentation +- whole system + +All documentation is contained in the following locations: +- the `/docs` directory contains the bulk of documentation and diagrams +- the `README.md` document contains brief information about this repo and a pointer to documents +- the `RELEASE_NOTES.md` document follows ____ and should note all notable changes to this repo +- the `LICENSE` file contains the standard KBase license in plain text format + +All text other than the license is written in [markdown](https://daringfireball.net/projects/markdown/), specifically [GitHub Flavored Markdown](https://github.github.com/gfm/). + +Diagrams are in [Plant UML](https://plantuml.com) format, which are exported and embedded as `.png` files. + +## Editing + +It is recommended to edit documentation with a markdown editor which provides syntax highlighting and live preview. This may be an external editor, such as [Mark Text](https://marktext.app), or a coding IDE which provides such support. + +One successful platform is [Visual Studio Code](https://code.visualstudio.com), which provides support for both Markdown and PlantUML via plugins, as well as top-notch coding Python support. + +Another excellent IDE is [PyCharm](https://www.jetbrains.com/pycharm/) which similarly provides full support for both Markdown and PlantUML via plugins. + +## Structure + +[ TO DO ] + +## Diagrams + +[ TO DO ] \ No newline at end of file diff --git a/docs/documentation/readme.md b/docs/documentation/readme.md new file mode 100644 index 00000000..3dabe18e --- /dev/null +++ b/docs/documentation/readme.md @@ -0,0 +1,12 @@ +# READMEs + +There are two types of "README"s in this project. All of them share the attributes of being named `README.md`, written in GitHub Flavored Markdown, and generally providing an overview of a topic. + +The canonical `README.md` is located at the top of the repo and generally follows [this readme standard](https://github.com/RichardLitt/standard-readme/blob/master/spec.md). + +There are also several other non-standard readmes found in various directories whose purpose is to provide context for the contents of the directory they are contained within. + +## Project README + +The project readme generally follows a [standard format](https://github.com/RichardLitt/standard-readme/blob/master/spec.md). Some other format could be adopted, but it is useful to lean on one. + diff --git a/docs/documentation/release-notes.md b/docs/documentation/release-notes.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/gha/index.md b/docs/gha/index.md new file mode 100644 index 00000000..90ed4790 --- /dev/null +++ b/docs/gha/index.md @@ -0,0 +1,2 @@ +# GitHub Action (GHA) Workflow + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..beb85f2e --- /dev/null +++ b/docs/index.md @@ -0,0 +1,28 @@ +# KBase Sample Service + +## Contents + +- [Configuration](./configuration.md) +- [Testing](./testing/index.md) +- Development + - [With Docker Containers](./development/local-docker.md) + - [MyPy](./development/mypy.md) + - [Using from Another Module](./development/from-another-module.md) + - [Using kb-sdk](./development/using-kb-sdk.md) + - [Using Pipenv](./development/using-pipenv.md) +- Documentation + - [Overview](./documentation/index.md) + - [Diagramming with PlantUML](./documentation/diagrams.md) + - [the README](./documentation/readme.md) + - [the RELEASE NOTES](./documentation/release-notes.md) +- Design and Operation + - [API Errors](./design/errors.md) + - [Validation](./design/validation.md) + - [Built-in Validators](./design/built-in-validators.md) + - [Kafka Notifications](./design/kafka.md) + - [Implementation Notes](./design/implementation_notes.md) + - [Sample Service / Relation Engine data linking](./design/link_ws_data_to_sample_in_RE.md) + - [Linking workspace data to samples](./design/link_ws_data_to_sample.md) +- [GitHub Action Workflow](./github-action-workflow.md) +- [Architecture Decision Records](./adrs/index.md) +- [TODO](./TODO.md) \ No newline at end of file diff --git a/docs/testing/index.md b/docs/testing/index.md new file mode 100644 index 00000000..166e01d4 --- /dev/null +++ b/docs/testing/index.md @@ -0,0 +1,22 @@ +# Setup and test + +The Sample Service requires ArangoDB 3.5.1+ with RocksDB as the storage engine. + +If Kafka notifications are enabled, the Sample Service requires Kafka 2.5.0+. + +To run tests, MongoDB 3.6+ and the KBase Jars file repo are also required. Kafka is always +required to run tests. + +See `.travis.yml` for an example of how to set up tests, including creating a `test.cfg` file +from the `test/test.cfg.example` file. + +Once the dependencies are installed, run: + +``` +pipenv install --dev +pipenv shell +make test-sdkless +``` + +`kb-sdk test` does not currently pass. + From 93eec407e0f5e25a14fd1dfbae4da86d93c2d530 Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 31 Mar 2022 09:38:45 -0700 Subject: [PATCH 02/29] add missing items to table of contents [SAM-209] --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c0678b58..96dd3b71 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,12 @@ The Sample Service is a KBase "core service" which supports storage and retrieva - [Background](#background) - [Installation](#installation) - [Usage](#usage) +- [Documentation](#documentation) - [API](#api) +- [Maintainers](#maintainers) +- [Thanks](#thanks) +- [Contributing](#contributing) +- [License](#license) ## Security @@ -34,7 +39,7 @@ The Sample Service is a KBase "core service" which supports storage and retrieva > TODO -## Documentation for development, testing, design +## Documentation Please see the [Documentation](./docs/index.md) for detailed information on development, testing and design. From b9fcde371e0df6a7ecc1e40f4471af4812d1971a Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 31 Mar 2022 11:36:57 -0700 Subject: [PATCH 03/29] remove old doc [SAM-209] --- docs/_old/local-docker.md | 91 --------------------------------------- 1 file changed, 91 deletions(-) delete mode 100644 docs/_old/local-docker.md diff --git a/docs/_old/local-docker.md b/docs/_old/local-docker.md deleted file mode 100644 index 560c8dfd..00000000 --- a/docs/_old/local-docker.md +++ /dev/null @@ -1,91 +0,0 @@ -# Local Docker Development and Deployment - -Due to the sample service's dependencies on other services (Arango DB, Kafka, Zookeeper, and KBase's auth and workspace), it can be rather complex, time-consuming, and unreliable to install and run these dependencies on the host machine. - -To ease this burden, you may use a docker-compose based workflow. - -This workflow: - -- runs real external 3rd party services in containers (Arango, Kafka, Zookeeper) -- runs mock KBase services - -Here is the basic workflow: - -```shell -export MOCK_DATASET_PATH=`pwd`/test/data/mock_services -make host-start-dev-server -``` - -After a few seconds, you should have an operational Sample Service running on http://localhost:5000. - -To close up shop, halt the services with `Ctrl-C` and issue: - -```shell -make host-stop-dev-server -``` - -and then - -```shell -make host-remove-dev-server -``` - -to clean up the containers - -## Port - -The standard port for KBase service containers is `5000`. This is also the default port exposed by the docker container. However, there are cases in which port 5000 is already used. E.g. in macOS Monterey port 5000 is used by AirPlay, in previous versions it may have been used by Bonjour; generally this port is claimed by the "commplex-main" (https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=5000). - -To use a specific port other than 5000, set the `PORT` environment variable. - -E.g. - -```shell -export MOCK_DATASET_PATH=`pwd`/test/data/mock_services -export PORT=5001 -make host-start-dev-server -``` - -## Accessing the Service - -As mentioned above, the development server will not do very much without populating ArangoDB (including some aspects of the Relation Engine) and complementary data for the associated mock services (Workspace, Auth). The dev server was originally set up for testing new methods which provide data from the validation specs, and thus doesn't require the database. - -These methods are not available presently in the Sample Service (they are being prepared in a subsequent pull request). However, the status endpoint does not require the database, and may be successfully invoked: - -```sh -curl -X POST http://localhost:5001/ -s \ - -d '{ -"version": "1.1", -"id": "123", -"method": "SampleService.status", -"params": [] -}' | json_pp -``` - -which results in - -```json -{ - "result" : [ - { - "servertime" : 1641222955761, - "git_commit_hash" : "b362ec800344f7c527ace52d0cc0127d006a731c", - "message" : "", - "version" : "0.1.0", - "git_url" : "git@github.com:kbase/sample_service.git", - "state" : "OK" - } - ], - "id" : "123", - "version" : "1.1" -} -``` - -> if `json_pp` is not available it may be omitted - in this case the JSON will be displayed in a single line, i.e. without indentation. - - -## Status - -This currently works for methods which do not access ArangoDB. That excludes most of the API, so we have work to do!. - -Primarily, the database needs to be populated with example data, and supporting mock data for the workspace and auth as well. From 3be5782fe66a2f5d61fe589709cd3326127a7534 Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 31 Mar 2022 11:37:33 -0700 Subject: [PATCH 04/29] edit docs for correctness [SAM-209] --- docs/development/using-kb-sdk.md | 6 +++--- docs/development/using-pipenv.md | 28 +++++++++++++++++++++------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/docs/development/using-kb-sdk.md b/docs/development/using-kb-sdk.md index ca60fd91..95b27c7b 100644 --- a/docs/development/using-kb-sdk.md +++ b/docs/development/using-kb-sdk.md @@ -12,7 +12,7 @@ This document describes, in a nutshell, current practice. ### Compilation -This is a Python project, so there is no real code compilation. However, the "compile" command, as configured in the project's `Makefile` and implemented in `kb-sdk`, does more than compile a project which requires compilation. It also generates code. +This is a Python project, so there is no real code compilation. However, the "compile" command, as configured in the project's `Makefile` and implemented in `kb-sdk`, does more than compile a project which requires compilation. It also validates the api spec and generates code. Typically, a `kb_sdk` service is maintained by updating the "spec file" (`SampleService.spec`) and then running `make compile`. This would: @@ -37,7 +37,7 @@ Rather, tests are run via `make test-sdkless`. The `kb-sdk` command is made available through a docker container, which uses an image based on the latest release of `kb_sdk`. -You can consult the [KBase SDK Docs](https://kbase.github.io/kb_sdk_docs/tutorial/2_install.html) for the official installation procedure, or follow these somewhat simpler and less intrusive instructions: +You may consult the [KBase SDK Docs](https://kbase.github.io/kb_sdk_docs/tutorial/2_install.html) for the official installation procedure, or follow these somewhat simpler and less intrusive instructions: - install `kb-sdk`: - `make install-sdk` @@ -54,4 +54,4 @@ The following command: make compile ``` -will run the compilation. +will run the compilation, emitting errors if there are problems with the spec file, or generating new or updated method stubs for any newly added or updated function definitions. diff --git a/docs/development/using-pipenv.md b/docs/development/using-pipenv.md index 6cfd9962..fcc3fab1 100644 --- a/docs/development/using-pipenv.md +++ b/docs/development/using-pipenv.md @@ -45,7 +45,7 @@ This section describes how to get `pipenv` up and running on macOS. These instru If you look for `pipenv` from the command line, you'll find it is not found: ```sh - erikpearson@Eriks-MBP ~ % which pipenv + % which pipenv pipenv not found ``` @@ -88,7 +88,7 @@ This section describes how to get `pipenv` up and running on macOS. These instru `pipenv` will automatically create a virtual environment for you, stored in a location like: ```sh -/Users/erikpearson/.local/share/virtualenvs/temp-Y3u9pGcy +/Users/YOURACCOUNT/.local/share/virtualenvs/temp-Y3u9pGcy ``` `pipenv` creates this virtual env based on your current directory, and knows how to locate it when you issue `pipenv` commands in that directory. @@ -103,8 +103,18 @@ pipenv --rm within the directory in which you ran `pipenv` previously. +## Using `pipenv` on Linux + +> TODO: Please contribute to this section if you develop on Linux + +## Using `pipenv` on Windows + +> TODO: Please contribute this section if you develop on Windows + ## IDEs +Development IDEs may provide direct pipenv support, which is critical for code analysis tools which, for example, highlight unknown imports or typing issues. With pipenv support, the IDE can index all dependencies, and even provide the ability to manage dependencies via their interfaces. + ### Visual Studio Code - First, in the `pipenv` shell, enter `which python`. @@ -112,9 +122,9 @@ within the directory in which you ran `pipenv` previously. E.g. ```sh - ((sample_service) ) erikpearson@Eriks-MBP sample_service % which python - /Users/erikpearson/.local/share/virtualenvs/sample_service-reumRtLV/bin/python - ((sample_service) ) erikpearson@Eriks-MBP sample_service % + ((sample_service) ) YOURACCOUNT@HOSTNAME sample_service % which python + /Users/YOURACCOUNT/.local/share/virtualenvs/sample_service-reumRtLV/bin/python + ((sample_service) ) YOURACCOUNT@HOSTNAME sample_service % ``` - Copy the resulting file path. @@ -122,7 +132,7 @@ within the directory in which you ran `pipenv` previously. E.g. ```sh - /Users/erikpearson/.local/share/virtualenvs/sample_service-reumRtLV/bin/python + /Users/YOURACCOUNT/.local/share/virtualenvs/sample_service-reumRtLV/bin/python ``` - Then we set this as the interpreter: @@ -136,4 +146,8 @@ within the directory in which you ran `pipenv` previously. - Paste in the copied path and hit Return -- You should have have a fully functioning Python development setup for VSC! +- You should have a fully functioning Python development setup for VSC! + +### Your Favorite IDE + +> TODO: Please contribute a section for your favorite IDE! \ No newline at end of file From db4307a1e2eedee380d5d3ee4ea9d0ff15f0e30f Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 31 Mar 2022 11:37:57 -0700 Subject: [PATCH 05/29] remove reference to travis, no longer used [SAM-209] --- docs/testing/index.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/docs/testing/index.md b/docs/testing/index.md index 166e01d4..94e771c6 100644 --- a/docs/testing/index.md +++ b/docs/testing/index.md @@ -4,11 +4,7 @@ The Sample Service requires ArangoDB 3.5.1+ with RocksDB as the storage engine. If Kafka notifications are enabled, the Sample Service requires Kafka 2.5.0+. -To run tests, MongoDB 3.6+ and the KBase Jars file repo are also required. Kafka is always -required to run tests. - -See `.travis.yml` for an example of how to set up tests, including creating a `test.cfg` file -from the `test/test.cfg.example` file. +To run tests, MongoDB 3.6+ and the KBase Jars file repo are also required. Kafka is always required to run tests. Once the dependencies are installed, run: From 3e7760eba3bb0299ae1c610a5739aa28aec4b676 Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 31 Mar 2022 11:38:13 -0700 Subject: [PATCH 06/29] add deployment section placeholder [SAM-209] --- docs/deployment/index.md | 3 +++ docs/index.md | 1 + 2 files changed, 4 insertions(+) create mode 100644 docs/deployment/index.md diff --git a/docs/deployment/index.md b/docs/deployment/index.md new file mode 100644 index 00000000..5efa2e0f --- /dev/null +++ b/docs/deployment/index.md @@ -0,0 +1,3 @@ +# Deployment + +> TODO: this section should describe assets within the repo related to deployment, such as required and optional env vars used in deploy.cfg, the process of preparint a release and deployment, and perhaps tools we use for deployment itself. \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index beb85f2e..493f3e19 100644 --- a/docs/index.md +++ b/docs/index.md @@ -23,6 +23,7 @@ - [Implementation Notes](./design/implementation_notes.md) - [Sample Service / Relation Engine data linking](./design/link_ws_data_to_sample_in_RE.md) - [Linking workspace data to samples](./design/link_ws_data_to_sample.md) +- [Deployment](./deployment/index.md) - [GitHub Action Workflow](./github-action-workflow.md) - [Architecture Decision Records](./adrs/index.md) - [TODO](./TODO.md) \ No newline at end of file From f2129651c94d4c78dc49f2c16595b9258e665fd9 Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 31 Mar 2022 11:38:27 -0700 Subject: [PATCH 07/29] start fleshing out readme standard sections [SAM-209] --- README.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 96dd3b71..b2adcc26 100644 --- a/README.md +++ b/README.md @@ -29,11 +29,24 @@ The Sample Service is a KBase "core service" which supports storage and retrieva ## Background -> TODO +The Sample Service provides a means of getting "samples" into the KBase environment. It is therefore tightly bound to the KBase infrastructure; it is not an independently running system. + +Sample raw data is "uploaded" to KBase, is "imported" via a Narrative app into the Sample Service, may be "linked" to existing data objects, may contribute specific data to data objects. + +A sample is a set of key-value pairs, or fields. If the key matches a pre-defined sample "metadata field", called "controlled" fields, validation constraints will be applied and the value may be transformed. Fields which do not match a controlled field are "user fields", have no constraints, and are not transformed. + +The sample service does not capture relations between samples. There is mention in the documentation of sample "trees", but that feature of the sample service has never been fully developed or utilized. Rather sets of samples are maintained in the KBase Workspace in the form of the SampleSet object. + + Samples are stored in ArangoDB, a database shared with the KBase "Relation Engine". The sample service interacts with other KBase and KBase-managed services such as Kafka, Workspace, Auth, and User Profile. + ## Installation -> TODO +The sample service may be run either locally for development or in a supported runtime environment, e.g. in a KBase environment. + +In a development context, the Sample Service may be [run locally](./docs/development/local-docker.md) as a service target or within tests for running integration tests. + +Within a KBase environment ## Usage From 9b766060529a46ecbfd49e3edae76a2ee946d51d Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 31 Mar 2022 12:02:26 -0700 Subject: [PATCH 08/29] more fleshing out readme standard sections [SAM-209] --- README.md | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 94 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b2adcc26..1f1ad4e7 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,87 @@ Within a KBase environment ## Usage -> TODO +The Sample Service is used as an API endpoint for various other services, such as the Sample Importer, Narrative, Sample and Sample Set landing pages, and other apps. + +It is roughly "kb-sdk compatible", and as such uses the KBase "JSON-RPC-1.1-like" interface over https. + +For API usage consult the generated [api document](http://htmlpreview.github.io/?https://github.com/kbase/sample_service/blob/master/SampleService.html). + +For example, here is a call to get a single sample: + +```json +{ + "version": "1.1", + "id": "123", + "method": "SampleService.get_sample", + "params": [{ + "id": "4c72858c-5d61-45fb-b47e-974005c1b074", + "version": 1 + }] +} +``` + +> Note that an `Authentication: KBASETOKEN` header (where `KBASETOKEN` is a KBase login or other auth token), is required for private samples, and a `Content-Type: application/json` is recommended. + +Which results in (elided to shorten): + +```json +{ + "version": "1.1", + "result": [{ + "id": "4c72858c-5d61-45fb-b47e-974005c1b074", + "user": "eapearson", + "name": "0408-FW021.46.11.27.12.02", + "node_tree": [{ + "id": "0408-FW021.46.11.27.12.02", + "type": "BioReplicate", + "parent": null, + "meta_controlled": { + "enigma:experiment_name": { + "value": "100 Well" + }, + "enigma:area_name": { + "value": "Area 1" + }, + "latitude": { + "value": 35.97774706, + "units": "degrees" + } + }, + "meta_user": { + "redox_potential_?": { + "value": 431.5 + } + }, + "source_meta": [{ + "key": "enigma:experiment_name", + "skey": "Experiment Name", + "svalue": { + "value": "100 Well" + } + }, + { + "key": "enigma:area_name", + "skey": "Area Name", + "svalue": { + "value": "Area 1" + } + }, + { + "key": "latitude", + "skey": "Latitude", + "svalue": { + "value": 35.97774706 + } + } + ] + }], + "save_date": 1642712508378, + "version": 1 + }], + "id": "123" +} +``` ## Documentation @@ -58,19 +138,26 @@ Please see the [Documentation](./docs/index.md) for detailed information on deve ## API -> TODO +The API is documented in the generated [api document](http://htmlpreview.github.io/?https://github.com/kbase/sample_service/blob/master/SampleService.html). + +> TODO: In the future a more helpful API description and usage document may be provided. ## Maintainers -> TODO +This project is maintained by KBase staff. -## Thanks +## Contributing -> TODO +Contributions to this repo roughly follow gitflow: -## Contributing +- create a feature branch from the develop branch + - feature branches should be created to satisfy a JIRA ticket; include the JIRA ticket id in the branch name +- develop in that feature branch locally +- create a Pull Request against develop from this feature branch +- the PR then enters a review/change cycle until the review is complete +- when complete, the PR is merged into the develop branch +- when a release is called for, the develop branch is merged into master, a release is created off of master. -> TODO ## License From 981b20461605040298add4cdf3b942b1778ba1ac Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 31 Mar 2022 12:05:09 -0700 Subject: [PATCH 09/29] remove "thanks" section [SAM-209] --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 1f1ad4e7..6c305858 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,6 @@ The Sample Service is a KBase "core service" which supports storage and retrieva - [Documentation](#documentation) - [API](#api) - [Maintainers](#maintainers) -- [Thanks](#thanks) - [Contributing](#contributing) - [License](#license) @@ -26,7 +25,6 @@ The Sample Service is a KBase "core service" which supports storage and retrieva > TODO - ## Background The Sample Service provides a means of getting "samples" into the KBase environment. It is therefore tightly bound to the KBase infrastructure; it is not an independently running system. From 3a4dafdf3549cdc52de334b8059b854a3a8464c9 Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 31 Mar 2022 12:06:25 -0700 Subject: [PATCH 10/29] remove a TODO note [SAM-209] --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index 6c305858..1476b09e 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,6 @@ Build status (master): The Sample Service is a KBase "core service" which supports storage and retrieval of experimental sample data. It supports validation, access control, versioning, and linking to KBase data objects. - ## Table of Contents - [Security](#security) @@ -37,7 +36,6 @@ The sample service does not capture relations between samples. There is mention Samples are stored in ArangoDB, a database shared with the KBase "Relation Engine". The sample service interacts with other KBase and KBase-managed services such as Kafka, Workspace, Auth, and User Profile. - ## Installation The sample service may be run either locally for development or in a supported runtime environment, e.g. in a KBase environment. @@ -138,8 +136,6 @@ Please see the [Documentation](./docs/index.md) for detailed information on deve The API is documented in the generated [api document](http://htmlpreview.github.io/?https://github.com/kbase/sample_service/blob/master/SampleService.html). -> TODO: In the future a more helpful API description and usage document may be provided. - ## Maintainers This project is maintained by KBase staff. @@ -156,8 +152,6 @@ Contributions to this repo roughly follow gitflow: - when complete, the PR is merged into the develop branch - when a release is called for, the develop branch is merged into master, a release is created off of master. - ## License SEE LICENSE IN [LICENSE](./LICENSE) - From d14606a266d17fbccb337245d0c0ea14b7320810 Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 31 Mar 2022 12:08:06 -0700 Subject: [PATCH 11/29] remove duplicated TODO.md [SAM-209] --- TODO.md | 66 --------------------------------------------------------- 1 file changed, 66 deletions(-) delete mode 100644 TODO.md diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 689d4585..00000000 --- a/TODO.md +++ /dev/null @@ -1,66 +0,0 @@ -# Design -* What are samples called? SampleReplicates? -* Do we need replicate groups? - * Case where samples are functionally subsamples but cannot be produced from the same sample - as the experimental techniques don't allow it. - -# Functionality -* List / find samples, possibly with... -* Search integration -* Logging -* Workspace @sample integration - * If user has access to sample set, should have access to embedded samples (?) -* ACLs: - * cache known good users - * cache user roles - * remove self from acls (read/write) - * change sample owner - * Probably needs request / accept multistep flow -* Cache workspace reponses -* Stand alone validator CLI - * Validate without sending data to server -* Versioning scheme for validator config -* Kafka events - * Improve reliability - * Currently if the service goes down between DB modification for a new link/sample and kafka - reciept of the message the message is lost. - * Could improve reliability of messaging by putting a `sent` field or something like that on - samples / links in the DB, and not updating the field until the kafka send succeeds. - * On startup, look for unsent, older messages and resend. - * Tools to recreate events from the DB (backfill new external DBs, handle cases where - Kafka messages were lost) -* Currently there's no way to list expired links other than setting an effective time on - the from-sample search and from-data search - * Maybe that's enough? - * No way to see the history of the links - * Listing expired links for a sample or data would require sort & paging, but it's not clear - how to page. The obvious fields are the creation / expiration date, but since those are - not necessarily unique, could return up to 10k documents. That makes paging smaller sizes - problematic/impossible. - * Listing expired links for a given sample *and* data is definitely possible since the links - don't overlap in time and can be sorted / paged by the creation date. - * Needs a sample/data/creation index. -* Lots of opportunities for performance improvements if neccessary (bulk reads [and writes, - which are a lot harder]) - -# Concerns: -* Searching for samples could get very expensive based on the queries. - * Maybe just using a Lucene based solution is the way to go. -* Searching for samples may be difficult as the metadata is embedded in the sample node - document which limits the possible indexed queries to some extent. - * Separating out the metadata documents means that traversals querying metadata would be - more complicated or impossible. - * Lucene as above -* If we want more features or constraints, linking data may get more complicated than is already is - -# Testing -* flake8 and bandit on test-sdkless (generated code is poopy) -* When https://github.com/python/mypy/issues/6385 is implemented, ditch all the stupid - `__init__.py` files - -# Misc -* The ~10 documents that have been written about samples - -# Obsolete -* Make kb-sdk test run in travis - * full stack is tested without it so nevermind \ No newline at end of file From d468c6111d89b4cf5e14e89c0ae5e9eff97833ad Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 31 Mar 2022 12:12:04 -0700 Subject: [PATCH 12/29] link to LICENSE via raw github [SAM-209] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1476b09e..fde78ceb 100644 --- a/README.md +++ b/README.md @@ -154,4 +154,4 @@ Contributions to this repo roughly follow gitflow: ## License -SEE LICENSE IN [LICENSE](./LICENSE) +SEE LICENSE IN [LICENSE](https://raw.githubusercontent.com/kbase/sample_service/master/LICENSE) From 471c2e75f2ad38f2fb7b44a6590253ae62ffe13d Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 31 Mar 2022 12:33:58 -0700 Subject: [PATCH 13/29] update GHA test status badge [SAM-209] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fde78ceb..35aa2505 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Sample Service Build status (master): -![Build Status](https://github.com/kbase/sample_service/actions/workflows/build-test-push.yml/badge.svg) +[![tests](https://github.com/kbase/sample_service/actions/workflows/non_sdk_test.yml/badge.svg)](https://github.com/kbase/sample_service/actions/workflows/non_sdk_test.yml) [![Coverage Status](https://coveralls.io/repos/github/kbase/sample_service/badge.svg?branch=master)](https://coveralls.io/github/kbase/sample_service?branch=master) [![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/kbase/sample_service.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/kbase/sample_service/context:python) [![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme) From b5c5db9bd18d4e2ba615d4c636edeea93ea08947 Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 31 Mar 2022 13:39:00 -0700 Subject: [PATCH 14/29] remove stray characters [SAM-209] --- docs/development/local-docker.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/local-docker.md b/docs/development/local-docker.md index 75193a95..da4f6f83 100644 --- a/docs/development/local-docker.md +++ b/docs/development/local-docker.md @@ -1,4 +1,4 @@ -lo# Using Docker Compose for Local Development +# Using Docker Compose for Local Development Docker compose can be very useful as a development platform. It obviates the need to install the sample service dependencies directly on your host machine. From be30d8edcbd0c5a02a45e79e2f07eed0f8a52595 Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 31 Mar 2022 13:39:12 -0700 Subject: [PATCH 15/29] edit [SAM-209] --- docs/deployment/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/deployment/index.md b/docs/deployment/index.md index 5efa2e0f..b7960756 100644 --- a/docs/deployment/index.md +++ b/docs/deployment/index.md @@ -1,3 +1,4 @@ # Deployment -> TODO: this section should describe assets within the repo related to deployment, such as required and optional env vars used in deploy.cfg, the process of preparint a release and deployment, and perhaps tools we use for deployment itself. \ No newline at end of file +> TODO: this section should describe how to deploy the sample service and related concerns. E.g. assets within the repo related to deployment, required and optional env vars used in deploy.cfg, the process of preparing a release and deployment, and tools we use for deployment itself. It should also provide links to KBase deployment processes. +> \ No newline at end of file From 4c8a704274fd14e8865e90a7c9d0018a795c7174 Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 31 Mar 2022 13:39:34 -0700 Subject: [PATCH 16/29] improve background, add docs site image [SAM-209] --- README.md | 16 +++++++++++++--- docs/images/kbase-docs-site.png | Bin 0 -> 175668 bytes 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 docs/images/kbase-docs-site.png diff --git a/README.md b/README.md index 35aa2505..940a6126 100644 --- a/README.md +++ b/README.md @@ -26,15 +26,25 @@ The Sample Service is a KBase "core service" which supports storage and retrieva ## Background -The Sample Service provides a means of getting "samples" into the KBase environment. It is therefore tightly bound to the KBase infrastructure; it is not an independently running system. +The Sample Service provides a means of getting samples "metadata" into the KBase environment. It is tightly bound to the KBase infrastructure; it is not an independently running system. Sample raw data is "uploaded" to KBase, is "imported" via a Narrative app into the Sample Service, may be "linked" to existing data objects, may contribute specific data to data objects. -A sample is a set of key-value pairs, or fields. If the key matches a pre-defined sample "metadata field", called "controlled" fields, validation constraints will be applied and the value may be transformed. Fields which do not match a controlled field are "user fields", have no constraints, and are not transformed. +A sample is a set of key-value pairs, or fields, containing measurements and observations. They may be gathered concurrently with physical samples e.g. to represent environment conditions, or afterwards representing measurements of the sample itself. In the context of KBase, samples do not contain reads, which are captured elsewhere in KBase. + +If the a sample field matches a pre-defined sample field, called "controlled" fields, validation constraints will be applied and the value may be transformed. Fields which do not match a controlled field are "user fields", have no constraints, and are not transformed. The sample service does not capture relations between samples. There is mention in the documentation of sample "trees", but that feature of the sample service has never been fully developed or utilized. Rather sets of samples are maintained in the KBase Workspace in the form of the SampleSet object. Samples are stored in ArangoDB, a database shared with the KBase "Relation Engine". The sample service interacts with other KBase and KBase-managed services such as Kafka, Workspace, Auth, and User Profile. + +See the following resources for additional information regarding the design of the KBase samples system: +- [Linking Metadata](https://docs.kbase.us/data/samples) +- [SampleSet](https://docs.kbase.us/data/upload-download-guide/sampleset) + +For additional information, including specific usage scenarios, please visit the [KBase Documentation Site](https://docs.kbase.us) and search for "sample". + +![Docs Site](./docs/images/kbase-docs-site.png) ## Installation @@ -42,7 +52,7 @@ The sample service may be run either locally for development or in a supported r In a development context, the Sample Service may be [run locally](./docs/development/local-docker.md) as a service target or within tests for running integration tests. -Within a KBase environment +For deploying within a KBase environment, please consult the [deployment guide](./docs/deployment/index.md). ## Usage diff --git a/docs/images/kbase-docs-site.png b/docs/images/kbase-docs-site.png new file mode 100644 index 0000000000000000000000000000000000000000..b11e5de2489c162def9fa1ea95bdab59a4f54d0a GIT binary patch literal 175668 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:b%^ZSxT739D6l?nDvMLOEneI6@+V?hCA)=&+pM z9SqqgE^iYJ{GmXLxW7-9HFzXMKWUS>zO>`IjpEO2Z~0YANMYOPDKHnA+w_s##awrG z3d}5Y9D%)o?;|rX%9onTB{i3y|FNy3iV?RM#81%;z(1;Le0DDE!nYtmAf%tMZf7-I zB9MdMb6OMt=P~E!*v&kJGvIC*v6bWpy&UH2iV^+U>XWZhml(y>n zA>m8!pc>@*;*JMZs!vXsgke?-TTZUze=r^4Yi*|dYlB(6k(6W7s8xHH(KD1{a188# z3mR4GeF1IWvBSIK@j$WO#8{^~Pc|zs+qUP$yhF~4i!$I-yWDiE71JIcDGp59?8fc1 zgvAw&VlDgGD4JXm3HVeV^jwU~{SQY5NE!p#Y|Xh^i6Ps@2d$e*;~xwvFHKI0!pWFd z(AIc&+;^IG9yr&Vb{}>Hu`Lu+PWaiuk*=)GJg9cn>R6?tX+k9Ay}Mc#%qh*|Y+4&* z!bDXBb4^VYiTUxA{XA@xL!GZV6jQ&^bR}zcwql96#kr*k*h}nvGY}VZQQ>5-9o*!* z9Y}+bA!F)?EE~TdG;5Vip4uwjHx6R?*5yz2NRO(!jv8NE zH%`l2LtI^(iQBJ-K}Xl=Ix%TMFbdU)0`|{bdtPIL4j@(jccRXCe(Yt4V52_zki0jq zxfD|=&<-7RNJ|xjaWEw)>lVYXjT|49d|4bXcM*z<%oNRF^}Xhs_gU-fn%Lh(R4Dg9 zR}EkozJD2B7>;p-wy}HgSF^#dhj(-m-yV@soL(A3{QQlFDzN3Vmxw8oDnCSoV`w8s zem}3ZCeKXIEgL|MC=1u#F&BgSPvbXR4t`we6j=Iib_2Qkp3n3))(7so%-3P%!-#N^ z!rqF%k|HB)lb{xXNywRTP?n-nE$Kt3jLN34;&s_ca7}pp+e;gMFVMs}k7C1G7AaDX z_ti}Xhw`jONC#xHSab#DY+-xppfzVTS2cGjHNoqGV~={45*2idKg}3rj(U7JkPxW| zNHcb#S@g*!FzX_y(+ASk#i`x^Fl~y5OIC3|;_6Y~sV087t~IDNTVed`Sr*@qB}m8} zY+ZN+q+U2I5Z}FW<9%JdwS2%56vVaLAS6_7QD#$i*sC$UxxrEWoW|b&cOJH-CyqHfigA2}_bJ-(lZsTU`H`&uky+s*B&-GWg)FfAj7xA! zC!8LDeDa8sLJiCZXou>~VjkB&~Ab&AM%dDmv-Erzprj;rv60#yXFUCKF_o8P{?g&RY zfqK8h7DDwRwR0za~7U+vX(-sst3ud!XA692vFof95?QDnd27CLflplc`EenbOv zlU}w(h}~NBL0pIRrEOYZ#j%4`v48w4V6b#N*842Rohcz2^5i_)(y0IT*FBENzfQIan5vc^p>>J#juTftVBRMK*b&Ip*rMqHW z>6W9KhePzL{H4cSgoZpmw<#~qP~bCO=DUKp;mH7Jftq=@S`j+E5#gvxRfGANI*J5& zsw+o~b#`jRedGW<_NI?isZ5A&iJyxpjrIoiu`utrfIaKC1JEp^v=Ep>@}c>9!#{oN zUqOIASZGwyJ0_8ZezGz&Yiwe;W}XNOuDUnEl;|XEk`*5V*oWSdUZJq3bvfF}=(Oa= zGE)3R>XxN5lchGoFni>cOD~Jy8$?DZpJ;lb|8xsj0zl zx3kwuTV0a+$CQP<<04KfulgPD#uRcX%PFq3X)TZ%fv!_4yE~Xy z;#rmOaWrNuwN z#(KW7{KJ4-;8udGzlxTOB<64mDWdry#o~O=>%-XilZ?3Q8n0pM@d1y@zZv*%_gf6% zg=@K5K8Z)bdYhh?O?HFMa98Q4Bm3y z#63mEMdJMnf{99>+8Ry(#r%2Qovbdvx8xA3(?X15=zyw55Zyn22u|3?6sT{ zUEKp!M*$d9d8-U+6f-nH>$kGrr`4m>xo(A%7j%?2M=xA-e@aR2UHkhYf5@)#3_S7x zHGVPq_>Gn}&+~oD)Nn>&TiEkTlDpw@**8(Mg@#I1v!-vN2RkDe3w!o=@c6E7kw=iz zr?HN0tTxppN}CW<$A4Uc|HdT4;JaN*V-L8&6j98;j!0L%o|($Y*!D1m_Q-hiC%XgF zK*cZH9G^?g44E>OllE zmoO(I=Fs`oJ#v9}kd5S2G6i$RLtks&99&T&G?|U99tckHBJNZz40KgJsTJjJ6rkEX|Jg z7tk%KbiCaCXfQLUfhng^t2|qtc!(pB!75q*f|4w|n0u{5J*Z{QPqXh>n(THcZ$DiY zmwm+%py>jT2eOQXLpP#k39%D~I_A;5DU(JdW12}Qi50}2)TaDW;3(o4&7m0`n}_cd zdT7j@mT0ZZ0Ou(6Ts>VSn8_a=y_6WD?4k+eQ)GR4RLMRVBBhN}GcOB=6)JOIay+!O zjPHjB=3aHaciSc9O=RSKg=r_~Rf_uIGyi}V6l^z>A2D6+mD+m!ayC@$(xJkOEhKbN z$aF-eI6MeWHQwZ)JZw9}tTXD&bt!8~?G~aV@sl)_wTG38v&Zh zY6Y+2`P#Thu}Avl7jf6%Y@>HstLu!5;dqHQ_4S1ag%-z0M*wnEAP|mXwaI>2I*o1^d53+o+xk~pk4rT_$jPOwP(mVA$Ne`2F zq6SA52?b>+8=DAWu@}w3As`AjxLUa>RyF*kzAgr+INrs#XqYpo21xxXAwJm z#=@#^6H|$2mI!bjJB!n}*n3UX)pPY$DW}_QDrU!12yeoY4uYZQizq{0Z4uXloH#ya zwQG~m@W>6DTTnAMu3A}5*P8hsSs|b*9G#TRPzvJH-OVK(`PntwH1hOnw?71TZ8g8% zYJhjKyhvG;d?H-OE90y?ZgwY*APwfA!fDv<^fq(d-91P04St?QDG)Da=uV?8)>Z1T zjZyrTiBwJB$}=-hfh?n%rK4gp1bU_58>Qr9hkIJhu1M0ObO;rcOQUO>;c9G_>j*vD z(wzI%+RitD##f1B?yp!qh3}85V%~35?=KcG^AOM607-A0k1Acyi!!nWua%s69|B}_ z7QQ}PJysbGMdNhj8c_a!uU?eTV! z7e`#J90(o%*|)p$ypsy{W}|_yQUV?X!FaM6!lzOSoGNgvX0ocGH9-LccS7@;D*FQ)k4V`*D87;;S#ZG+~7g4yEt$N+( zjT;XN;v@Lxd8Ofj)c$%j45ZkDMku?4nLbAHadc?p29Zv$S4CbXVKw@q+SpLpD<(pT>%7x77vaHNMccWf^tw2H;m! z9EiT>;reO$wCcrh7dv8j8(0xb44?6MzwTl)g4L}o?IOw6vI zryQ^vqO0UthH!_E^_>M$~;+{deT#3j*}hqqs471_wgxvVHNvOK#?$ z&R~Mz!@drW72^lAFNE57r+%W%M43G-nH<>ay!WTWjPu6ux(!`ABd>^ngUQvCV*6et z{8ZNUouS3VmBTCDF+pZ?_Vsg6B!)>QR=)c5S#O9TB-$|jPzk-&nU*T`s{)V_LOs47SL=gp(%7DCbYk&{1W4VLwOM=t61__VXx$O$z*?rfI%T0; zx+Ndv=IRC-l=9vt{#9k}Yc8i($5}(phzxZ`j6LPMUQ#BT+!Dc-1jYSX+sp~2L$#s= zmV)_~tuNOZ3_+K5wM@W>@?M-;5ji{sk$Y54ud+`=p{0{vB@0)IOkc6=`?xIk3D`B$x(&1*8p@W-?88=r}rG3W3fDeVFwW~v+{#{(jkNJ6K-bZgT z|6p7qpJ{PYNf(b6%jT=d_Av}5O=c@~vEa)3BS9L1z;%RPOi4-|`UkM#vN-B5h$G15t?HG9gosul?E6MNsp|DsarI#0 zYwqjZo4ynJc469gkb2{sU~VT14YcElpR;%W8$4_`B6Y z+VFt(c*s|)pCg74nGC4yw@!~O+M#!Ni`S`~;8n(|Ghi>BbXTocJ*Mwbxwi%RHPIuP zLEE$E3~p+V*a)DeIq@H8ne8*dWUE`;qzQ)DL0sMG0@9;B_~CVgNiV)dpYB4IkBR-X zhWEEU9VcmMhS-b6x7TVWplMgz1TW=;*Gq|BE^g>GLe)!nEnub$Q#SnZ8Y;*S9MV)>v)s)M;(qn zdoQlVmjQY(+hRXHmZ$9w5h`f}0!>ZfcP!f4V!kBu->c-i&A1DFT`Bkg*QE?IfZS;@ znxtsUd@Tl!4))|N#jeGOpn?#g0{05eZfMCVt@^oMH zj0;hpU+hl1PB=914~FQ>Xy}Q@)hQ{uyS?_q08y&y9vtOx;Z=y(q=h`J0`f&+yqkDN zyP?p_oepn$L<_7SX`I=pI&Rh78|;P>qn{OVgb8ZWo-Ze(6Lt-*H6aun?YI*`zc>Nqf)KU@@?Jn48=0ah%Pts1WO?;u5O zGrXqyE(litFf8~-f&!X(_7m8?Co8XPv7-ZN=Z5TwSwYfAa~y1*&1y;~+`A~F8y|0S zDd`@2D}~2yQ~vZ%LrV<3gckAWHXaAQm8!Hen{>0fVx1wqj;;Ic7wZzW6;!t-BTg3p zqcit!2dt+)7Y}sPXQNR*4A&SKb$7EqFB<6lstP}wSx>GRotQS=vS~z+r#o;CW$&UF z->@B^ZMlp2KCz?oSd_bilLm!j!u0JP1Tpn|l&cp*N7P$jwaeX>2fq+YQ%%jV=EcE8 zGK=4^Q4S6yETb-y*T@I&S~OM9Gr?z0StLBHWl5ho{r0Q0FCKfl@~IaE88)N4*I7wY zq}aTC{6N4wK_ZPJXmGiqbTiea=)o-TV3DxB!hSgsZ}}FhxE=Dtb@tkLKD5;WaTH@ z_M{_BKSX7K-{9*enNCmknS8rqw5T^^Lbg-RWpQU5iEF8w|KB0=$xXs3ff zDxuQZYj$FD@`Q$eNN#}(HAcViRhciWy9$&g)p`8vnI*f)j}jyeZZ1{X`$=W=<0!kL zbUNx0k&UM*qF(6|bO5I(hEm6v+9#Ntmx4PZ1uC3hV~eq)lZE#o@8Vr`zed8{EW;HX z8z#fE$%S7F`oh5e!oQvB-ujPg{Jp3y8H900jlA~#E$f`0XQX#)=8R-I`;-QVLmMsH zHg%U){Ty#g$9%y~yif}3{{c&2rq#`%;?aCg_q(o?>qWkeWT4C(VR`GsR!bX$8D7pK zidVkU((}oCcv$djn5V>(&Fzox58inumGpqDLSRc+Wg*2B7Jk4oNE7U_Jc~3&2=ixE z8Rz)RHsbVii>dU`OywcBq1Ek46oE*{R%OfAE$?Ad%;KEtT@WqoGD(OMboUiWHHd%AQ607aCiZu6q!}Fz7EAhTGoG$@}YINQt zR39)$4)wJTN_3`ZU840pRC7y;!SR_#fX89lD5zfz`c4{k4~?PeVSn=P?bqp$m%P2` z2xz1F6ec6VOYcz4x-q#Mjg zbGy`fJk5^knT6G3u=yiEyWBS2Hd63~<${4)hwBsXyo)!QvVut@tA-;zDGV2qMim#t zf0tZ)_`bjPq^al>JH&SsXoS$f3;k^0eND?c5#uWK!Rlkc## z`)NLy!lU}jM9Wss?xR*~k%v<`OO9Al`}S&#lAIH{4PMbtCb!F?^Q`Sp$G zXMAqlYe-~xi2EJ)_$_oYVl1PxAXgzcoC(P0VqEk*B#X~_YZu*2=)ED0F&3KF0-i;| zf%}#6q{T#Xc7Ekx?Q#>Q6)cM4igDXX6!^2 z71p8_O_iOyLKtr_p0POt7{xg}sl&*7kBI?r9B|szRV{f1B@&}%S{BNfBmr~=?)@zg z3;bX`D0uNpT~_~{xG_B?DyhG0@&|NSN}{lnp-L)2NHwd}rgqCAqwZh2R5ZSI%|-(( zt7}J!TG>_Pa06YRwVB-{T<`VXn-Cx0G!HI}lj6b(7HGIwCYe*8#q-{OM*&nkU8}q@ zQmH1M9K#)Y78zPIbo-}5kzZ+4P69?Va>5KO5zIzi^t|c(GCz=HJnaD-Dd|^Pq@8|l zD|DFJi50-%E|fyARa;4_>KfFR_qio$Aq9#z^mkf(>b)o}Ooo z3jX)W3z84Qy?;b3<*j+ihT2KUd{%uLXD>=&AU;k6n=-yovxM@e_C%%qYT-~{qQLTU zE0gTiCCou!EAjJfbcsH^y)=WJ@fu!DDiMTtc-$S4_9${Yt7ZFyRedm!NS>cCmF|U; zyl6iEHf5#Z!t*GGp3HtTJL9isIEK)UR_|Y@<@C5$MF;%Me1OU6dv1{#_saNs8tH5{ z7ihEXWjC^YS{3xJlpdN3ZOal2zxUp<6@3jG35Ph9P9|W5tQ%1d&p+9AC?wNy+IEU` z?Gjn#sIR-uI30nKgNUn5^C-W8%-5B#VMji!W;`lSycw7{-ZL+9)XOVZ20LLJMR8*_pS;gbr zFjC!jWwaLWe#0W6rdp>NM&n!g$e0`MHdvbGWp0U7M)#$W&IX-8o7X3M6a>8Zs!qit zuV1rx-LIhC#uy)rjXF$(p`OS~Ixd%MZEp4tow{$?X?b02^3^9Va|;H8FRBPDQ<}uk zpg#SAS9NsbV_5ef({p9ml_d%I`U^LsH!wV`+{fRtsYLxQ+na>z8l8fP9r3&*Oqf=g zp!pEs65zIPX&~&D28Ey=P>sJ!rP(F1PW1zl=7N2#ulw<$a$_0ff@|{Oe9YyAglm)$ z%PBHui%X?pVGEyEbL3`ccce!YVsBFLJN_H!V2QTSwwwwx^tmry*5Q26jhS!;Lj7zB zqcp$74_qI(?K-8+9QZf-2V%;jgN09TcNX%mf7lL#QJ@8^d#6Go_X+Dzm+>Y=y;82Z zSeIF zEs})u=qGJ{ebmfx?$9sb| zMbZ|>?Cw^_JO}f(aY=UA%tP}HH5`GpSuK1I2BqogGHF^kdKt2d`Q2haW{!l}hv{Rd z^i*Px9c;6)OvFjpup~2#&~D$|W!F^K$iX*wm7kHKUtNd;fA%$Zl!b02Wm3ZQ%Ve4 zyx{SY1*Z||WA$cfs5vH}yp}?3*xBW1a#uMy+roj_h$D|YDMq=BLW`UK+bFcNOb3x6 zaRG$m=B!$^{wr6}yjvp-@k&;%hE|kWRaq9K#f~j1DJ7QvMM&51S0?GNS@qM~eD0$z zxFM=>1szc5d`37D&!*A0uOSbh8SWbA^rkVI>(SAr$@tGq7bFh*@;<-RE?g0>3>?W~ z7;{vN?z6nr2_|_JNhT7o>sh(IWdIlK4+@UV^nJy{_A^=s!`$F3JTsHK7zyVrmMS|$ z3fw^)B&W%HCc@PtCBlmFKC(K)1SFS2qh=}D?@hs7niZC-J;b1>O(E)9hF`&17oA51PsJFPe+1 z@rh+nn1(u%sZ7p}=HeU>Bxx!#`BJ5chYrRgttp}MC6*jT5AXRJnm=7NN_w4YxBnZm z{?{Ig%!%>y3%ycGY21d)SSzx~-vElG&j(Ygq30+(}*nNN4DeusnxZT`F zCP7j|MZRGyh4hBm+%nU*E?GfdPHRZzVDjAj(7YtR*)fnRHUFx-fHY4yc%k}UEi!b) z{Kz=SUAS0^;>vt}oB{K@0)PbqD($a4tKU`ZenzlB@=9C1pBZ-gL4JhiCR>Qp>|(Gx zn2Bb{Oc#O~a&%x31jq!X?`|NoC$&epkIA*fr~(xd&y+uxQhEbrKT}K;UvNde$MFlV zEK96s$W{h=>S@poR#^*_nZ(P(GL^XJ{MxMKWifOAC{fOi!t<%pFvWT$4>pfHX5MX1 z&&ZA%oDW?jW3q2X-raT!X1KF>to1l6JLd08t=p*YQO6W~#rym2ZMr0|rXy^jPT?qb zzf;EQdN&e%{PJCrO(vIGD<{m|O+)wlpuAYJdU!Hz`ov+krn$&C$Q-7A|Hn9OMNNr+ z0C#C!sDw9i3X}n>ybvj(g-jPgixO>7zgfBue9Sx{=6RVNq6xQryc{}id6h5&{AQ#C z*k5YZ{~!X`MZAM`6xM9)B=S&`-yE}K+ae@5@L%GiDq+~|2Q_v#Hazu4}YGY)j*q=pZ&YGlHoZzEF-5lFIZj$}); zyDZUuC-{cW&l={!M;q;^q@Y!QV*iKn;vWO}hu|P6nD3zU)3>=gY+nOh-zq2GFZrA^ zWUe${>4^Pd~wQ`Y}E(VFw zw}G7A5MBPvkl;tu{g`vp3~LUv+9$&HaRv)&=tLYOloH}A00aTK=H1~ESn^m=xlvmy z1#&{|UPmI;5M>M^K3tNksgfVJbjo;`8t^A;WJpO#ut#%09ax#~I5i$`F z%~O{wjU05e${svHHYvPT{t>7zeWu|lWx;2I@PI4Zhy3U9eCLxv8yX`Il{uneBMG(E z`l%A->Gt--o0`!Q+36~b7jrm`lSBt`2YtuSGghr*AbRV8qE_nWxXH8U=-2OFDi2}S}?((>RSb1{ew{SQJ@;c z*3SO?ygJF`96S`hTc5B|a8B^wPx=Jzdpb0eXRuYPO{~a#8uw#WqgF-w4#Z7m>qndf zru>`sBYug5f*T7W{m}Cfb}@%B31P%q24H*`tV{k8!H2b(PrxY#D=N@XNs-6Z?vQC| zb;vE!5q|^UV7Vl;toi4?vWXY1ATY)5RKFw7{jy(O94!#EK z0qB|;j`@-_d0f%B+4;nU2kI@<`qod9EbaZ7Z3+kbUaPanV9(R6B6UI1tGhla&%OtC zsU^~7%A?2?l6J!!>8>q3c4Y*P(1P_C9iOeJ$};3(h~`5rizaXEaeTMIeG@WYRxa#*c_;ppU}1pi z3sMKpE>4=bdZgT!g1l?SO~w_MAKHUkecY}R3A}gZDLHZnm$QY1N`m#|822&T>Uw5nkVXE=fX+^mlTIFrX#HtRdhi`5X;dG`j+f-ykP0k-<1g!O z0Pb6DZ>D3P!ZglaRp3%)qC7WErI6XKGd#~-pyk}WNE6w~Cd^l%Q*KahQV#q@mbwGt ze4@1>^cVI%R4`YuzD2MxwX)lqg)q2K(ZoP|*GOp?clW09m9tBsb*w)GMgE1KMTdBh z!K{Oslumh4SLNkhx3ASYxa6iKUBnOrQ_`uHA4bO&bjS32ZVQo(r;X zb69l%F?q?UX1O(AEj&3a`#uzrfR!*2rSw2d!*$iW8tkHq@;D-D0moY90{(`z$B#%> z63s%4@g&2gQGJ-v?#YlEM~;<|P;~dA2s4b?po;*OO&Y-uF{_`x)<~k+p)k)&`A-(H z=G`yA8#*f6dDe5oq%)&DDLUvbCS6{Y!ml(`0E0ng7d(#(qM->^N*UX~_#2&wEz+QL zIytBL&C_+b&>H0gfjeLa;8z!dmZ3I9U!K z2{g+Ei87g4A^^HRpS_7CYvtcXy?@@Ff#1ueR@!uvkJ;bU#T!^9Uovp|tex-{EHV=> z=S3DwQuC&`uLo$pX)I~LyAe3r0qM6UK3yHB&<#@0UtUAp7tEQ`y z4rwq+MQq^G!AM0kmFVmJ+af0{8|ROmD3z5}EinNBfzMz>jV-wLojAAqw!zz#29n-db~WXA)%(H3|?| ze)2X;u0_qJkyJk!L=r9AwC0tyZc+=$sUA5pC&HRi2xZftOEoBW_a{IGE;SL@a$SPw z)npz4ssI}*Mi(9?u6?evJT(FhJK23K6mpp)CuwB@^#fq-U+Efj*CX<|QANHG8X~lr*Y^ia$Nc9ZBKRglRa& z?ouy}6!(`IrpG4U)B#6=%$W@Zg(F%uGXM@~qPoa1salCZ}5ucuFMH`m&AsYP*s)AInJg?G{oQIrYgU>L(vYd`A-rL3-_5=g?Qj!(; zLLKmi-0L9|0l%^Y+1;HNgsa6^+5b#c>_j5_0)}NipRn6@8;_w>GP0D(o7gs>*+)BMdgA`tfafYhQNE*8ZJb8wg=!ce-*y;^yhubh>w31mgKMrH#sY!nClaik|_ zHsrSLVisw3wG$tUDV`?o%Dl-NI zf#%don_Ts33;w7t6;vG+SOjjm+Q2~yt`Rhv?Vlr4Y+nL`cSve8RV||>09EC}Czo_2 z@Z9lQdU>N=2_GO0LH(L1GC|fC2c@~<>O$dx$|&Y#E29q^lo}!n@aEYnzHj!ri48R* z;G`@TEN+BL7WiY)2JvOl8-_dl-x&y(G=1%fBub?#Ja6%;nVu{DlB#{deIEhct_>)r zDf5UfRUBF0s_GCQ3+>6955H)BbkgT+o6+%*_E75 zZKeIV=DU7t_vYqw{lD2XED-TorBEfG z5cA-5E@70sd6dxP8FbjGl~PZ@{{lDpq+ypl!8Y?TH^LT6As@VS@s>GIYT5VG?yNV;GuP;I3ruGX=Fq0d8qm-kkPo*xBXU z%vYTEdEUc!^D2czz!Jp-Crm6|Ei3q3(OP%n1^K39o$-Dj!N9$mdmCjpiHVQ+lhAIMS$vrI(rph(g3U!aX-rU7j(v3(c4L1% zsQ*#kHG=cCM*%~L-0o1!y|2jM>_RVOpO-V6H#gW+|1wN9u{g+dXxfxKNM7U3bol2# z_)kzFo*RN7(Sps|`<~VvA1qm|XzbV$Vu_>6Tw2RCdbO!3La>=V+8&FAtz+D;`|m~G z@!}9H5EO7tfs}+*&nhED4LNDTkOl9-Lie(;@go@0)r6S*G8cuJFvMIYc@0u;t3CT9 z;AIbpuylWiLRpRkbl$^Mhx1iRhuCRR!~aDg)vdvo)jpY+D^`l5tZAg{ooB0}&I@u= z2$G%P*8w~95OQs4v%RLjP?waO*tic`o*v8sQ1Cno+Q5Xp+i zmo0N=E|SX;A;(HU_;2C7t^=WLq?o>YA<=~n8>2uQ(rIUU6`KQJY*A%xj713JkDVN$ zC6G__Y)(O%yT4*lw=*az`@IVB+7J{fsjRRY3lXUZ0V-M@cFf)T9o$@VXrAQ))$ z39T{^h#K_P9f7nxv;&SLIut4UJ@E&U=`@po?*2T|jTqjXdwp1-z}xnJDH;AH9*@_9 zxE%3O@JtDK2zOW)$rVp6N@XPCxQ_v1=u2}N93*OYtmOn!QvE$1Vua#*{BG6lQm2jg z-eK4eo}R=&*@DwT4iD65N~Sig76u}f&`~|RRcpQY<@kRL00*KPJO$&dj*&Im|IK_2 zZrXP5$MYs%xR}No<}^kGq8QVSNTC%xi&O63LrB=Z3}JjMO~%g;yB+7-eDU}r{r%K@ z7zxo<9E1^{poo@f_);fBGsJ;3nu`DP-NE#2eK_l1_J_8~@)hRtCsTm-4N}G0WYMuH z0TlBUm#v`RG+VAa9{sN&RR7@1cvi82ed3?V5d9sTQrj2Ni@>N8K#N_O5p5AW@2J&hX;cn z;ejVh>VG2){Kx*Iho}Z<4*Vkn8v(fm6CX}9Z1OT6U+baoxA=G^{2 zZ_t0Tw8>hadoOfOjS1hznpy7|S~*IaST3cM$Z`puvhby_aTZ+TT@@mEIMOJClvDnC z)&3)%9VP%rlf^zT|6+z@C{b1&HKF$j%@Mfcs@mL3#x+K(ktvwvqg= zNd>KI{M(Xr?v)N39VnyG3#kTqlOhclGC^9;n-5Fl0kHEW-L-z$rzU3pcgp_%xwJ1s z0H5JlT?9wQoADfG=Gr^EAjQ<(rr5f1o*9_qG{%7CkottFNQPX2rg(K_e!Ev3Ml%sR z=Y6mLtik-pdWl2-RC14?==2$T2hS=JF1p;5hGalBX`Gyo1P}5y5EW^TP|OL7j5(du zBQk7KM(MadUa7z5yuk$xZv!E?b0Y@%&Gzn?^}k<*XkG|{)_F0f_&0eG+-WPJ)ZH2U ztmF)ESkd?TV;I>;`fidlzD{DvNXM600uDd^oH72>?!%WM;+-a2%$xB##tNHjfM{sV z!;c(fW;ZN1mg@9X(I1{riRFR78n2nMwTZvIiX!=vL0w}2dqX}q`J-$&iE3C)L3|Ff zrhX-?IP%6f&hJMY@(~vb4 z+s=prma;{I^9#iP8j$?4^|D3@bXyl1ZQ|czSzg1mC+Vw4aTG#ied{p0r7-EkSWKW< z1vDH>t^MO`XbPSG5;6R95qK~ zSG8aeu9wba_+R5FC3v^LI~ewcIi+n8uy|XM?^o+2l)+?DW2k`%_GyuYK->GpUGaY} z!}pkFq1O@@C>0iRo8Dwd>>a&5kzD5FYN@y&v78JXkXE|K)UBwn zp~-5vObBOkb9Ng;2;h(pOl@wQ^6Ty0rO=I%P0@d(~b}J-HPm1E#tnq?|01S*lh-^?ZrZs?O61@@`m;R>g8uRIJs`*wbSN3 z(yY*tIu^=Tufc{5Xrv)pf?&Y7ugECc@5F2S^cmi+pCKZe#GdWr{QDn2ANbS(igG=S+Exa?GmOWBrzR%${ z%qvkT{fP-~pjq!;_Utlg+vFUDBR@pi5@F-V95_0zEz z%FP6e%Hlo@QsHbf)uG;*&kri@0x%qMlhylEi|f4a(>@eyh%1}DZKF~pKF$@3eY1*k z@;NAV)BCK?X{Axa5G9p(E-R(DN`HkGXlDZ`)oZ-F;V`?HnN4@ulb|V>FO*AfhEdA>My=V$Ixro$Y|7w zb{wcAVx1}NNL*lzET)>+$Mn)1ZA`{lJs zA+HEQ9WD~s9rleB%d|=oXA5I)a3&mA8)eKDD`@I006$7DtL20Eym>Y1-<9c9WGK$Q zCH#&MD|ZRcR}pwe##~ki!>(V(b0zm>>;Yx0VlyNWWrGuud@)Fad$otObp1Y?qtG|D zMnuujuUK~f46Hf$Vm#x;G}=&Ym;x)*auQdeLvyQZhgFF+CqChl4_M9c*Mqb=+jOF1 zTIkROLKxX6$lyK*LM_#=20ku35bQ+*^S+JpZ?6ZT41BAjEiC1GB+6BKu zUfzGL^K((UY;>J7f3O`TdU%rI&J}0D&-Ehl9egV#Lb=;lmoQH{d}z;v97(wW8kM*^ z)pmqVOTru%adQS+uj8)a5TyM3!ZzSA!)TQAlF0--yR@NM+)pP=H}57Uitkr0>?ILlYi3e5Zdo!zWjp z7PWHQx309G$*_|M2#EgS7REqe`#fYa_ydJf--+jGL%K+TbbrUF^cU)y-9*REOVlHY zlH|+d&CbIcPYMAbxjc1NTOX93)a#dZz6JJnI0xw@g!)$ypwL=VwQu8#X%_?3Oaq5Tr{cOueadhqmbsopXX z7K*US_mn(O-EhOqlx=#J}5ahBs>RhWH*J>`Cg4=byaJUx|OJmFx;v(W#WJUI$bW8x?6)F<9pf_ z^y~~KC~P~$S^OQO1$M(!e|Ms2b8d|%S=FUCI9VX&=~xH(dtgPP5wuS8 zwXFU}Gp+o2SLh8<15)wj=A+2Md3~yuXj7^Z(tqZ)Owm{Yo1X7TPrf5Fda%D=;GT zo&Afhv%9Y6OTBh?I&#eyYXzzuScV1Gmy&d}qa z3pUis;3^oJr%>fpx0NIJS3mdN7hMilR{4f6acE)LvpQMy<6thWIYRngtD^&w7)R$r1T@cEbUlMvdew7b#GFf1k);J_u?ARDJMPC-ys<@m! zON2z1_2T{tOL_+kpV1n|k8cc9=y1I`;&UzY;lY8n)eESC62A`t5$iK=7D_W&x)L(# zmc(O2clHAvu%`;p;7MJ=$x}h@TT6Sa7)#^Sa zu{-C2pW+RoI0%ZG7lz%~pU$_x8C`4<+n?dE2Cf73fh(L#RM6)P-cPFt(5NSrG%aEj zz}%)V!b)O-N)ZF))|*qPs)l;tc$?&hCYmF356fj{DbLTDgjyVyb880Xx&B)Z1o+Wy zdzheF{&P|=ZA#E{cVISBE+BOmgP4;E145W%M=D*M35R3q$K&;Dvv8DS^cd*ph8Jo998E##X#p1^v11eo5BksJBpoL9J3DZ&0M zF5awSOF(y%m2UjjCksX3dR{$&L3>zBFQ;yHZKe zcWu-V_`8GbBg{1=Qb_1i;mYbXdDkC{d;`qFaVSui|L+BG_Tre{D268H!cUAm?sn4$ z0fzfg4*x(y@`i%!8Art9suuLBe?fUaNCn(C9v!{h2?g4u(rApJyfw0wo5v-1-SvFC z9Dn*cBqxg9JXF4klSBnpy8D$??-$p_`HM`YB&vG{sNiD>UD>-G3p*|c`(jWn<1$NM zq*76?>2t$N1vC-OQbinOp}+)TMqXHNf%3NJbn*x$pEjAr@kDYXJcO{O2SeB%XJhs& z!(wP0?CtN$c4f3!r7Edm!TP03WnoE`Wx#@OX6pJOmbz0Sm|#wOBn4jxoL){#3{$OY z-ho{{+P-C9CRuTsK>(>-9N^j;Ed-C)*S>P|N6t9`;6Xhwc-`D>k)uvqaA;y*OzLif zQQWg35wO?{oKPPH%bsZ7>Ve*&u-a533{-`hO^0%;OBD( zpJZMi-&*r2f!lQ(+9IVITaglZ&k~;6v2ea&1J*FUD~9iLm>AO6dTXwyhD0@8VABw>Qi0UaFs-Yp`ZJ~_-j>jk z@k0?$$6b9^OrwnCB{ zw6k#C{oT~f@tC<1LI7`tcc|`bq{uOD(Q;4~4Hs?NqVlmQyt?xc>H3Hj<}N3N>fOZg zoYLy+0K~H@Wk<_xl&J4-RKU_3;_>Dy*|*oTre0sf&SM&Q-TB6;{xUG+1Otk3-lywu zxnUS@hd05fp#{5b19jkZ><8Fg0KTBn(}{cUyvOFAAl_k3I=4w=^NkNl6z`4YR()1Q z$4$oZtcU2L7a;A8k!5}LJ^_SFWo1Fv+5nW+a{w_A;uuGn(g6it&z*~qlG@;i~Xk% zJHI{*c{I|J*=gyPttAxv7fLuNhF-a#>}K3qAMo zGZS%vVfOu*A^PW0k~D)35xV>pSSOiGrw63z&XH7VDJb#uZMdIZj>JiG(LCBA5Xpv3 zMsf$4Syw1P9WK243EmL1?rrj-Zn3zC=6*l<^VtQfPbPQzIez{`GHk>ZT100vsR4D^tmUB5EluYs z1e7%nA7Vl)OvO@bZiSd%C&q;^b0~#8YK8l0IObneda1~BJE2VbRiikW1`^lUH4;Un z(hICzH7jf12)C)&{MPL~h=N+INN78)Qe%YP=z%oNq*dc@C~?e-$ZicxSlE_f`($)d>9n zxILUPTAVhTRy@mbtI5|JA+P^T8CiHF_1*Jf%!R@05iXg>AaPX5PE|e5oBkR4?Pd4%Pw~PJn zQ1?`-jdUAp?KsM{EYs~)8fL4-!ZAso&)E^4okBKN>Am(wH-!1QQd!D0#5q@!+N4vJ zr<)W+&3<{*?Gtl_A(Kc)DlO+tL}IjYlE|bG5Q;=ZT8%LF-;q)%Yl?%CaK8Kpw{hIB0qQm-U2nRw?Of2WNLvVGnji(zzIieJyNu>2Q3?n?x5>T@9X;MF^rYkoN06sM`?_kPrs{M%;|uuH-h z9}J=>?u(AzCqJ@e#TjnZZ;vCHJ#y0EGJB$~*`D7TV4ltxX#?8QW|rZwGLXOdb*8&5 zk^9vZXZg+D<*BU0?T~WHo0rq@yj^0otrz48J~`XJvKIiI9(Se}S3X2wvP2uaIW}^= zU0PHLK5T5aKac=)Ja5WcU*}sGOwVna9`$h=23d>j>6+9V?1A&lZcQo@?9}gz+#l*# zciC43EY)srGvpHVI&6r_qknZ^yVR!HEe&DZ-Mrk-Ow>&@{94VOp5VH$6|sLY=y<)X z2q;UpZrVK3+;QKi@E0_^o&7)%>UF!qO{L{=+NZLcyssm(g7e)JAVsj^1iWEi@rD9A zxQ(RW?Ji`lH8(WE_ZqW(%N*!{W&q8*V0TmAzKjQ-~p+mUp3^W?$8M85K{E7mf$ z0kP}1>!-?8eVA|FgE#rlJW0JK)_1^t=_tP29eT|q@OC(~y}oy+VGyq+CP(4ANi~rF zN7q;QMcHm$BLbozDc#Z_prkZNNlVudlF~UMEg&G>AT83}9YaZX_s}(T!vOQ$o^zh( zocI0S^AF5#=9+8oYwxw!TDv=>pbJlNnRFC)b4;RY_1(^gh+;*37S^MGt{4Z9Gv61; z+TWp`+xO}s!oC-K=?nI+#y$-v)goChH(TD~IB(F1A)0Tc8&<|y@q)n-XvsPi#sNY% z=gv;&CwXYBpWMCNy$5GcoEBw$Vg(Oxv|d#x%`jrGHl3dWRkej7@hg8vfnBq~QLa*F z_GX3Fo5P?ko`JE?COyidFc53qGT0}gw?!pwD5;w>jdF6ho6GL5YvrTSO+AXOq?Ws9nrrLIBKnjbr#=;30xeVwAZjxokrVs&PU@D{ z>dm}@CtdtRclzn07spAh&S4%gX!-C3exiY$H|rg?&DZ^8PQy}(zwux@UhkTJVAk(c z7CA*v5dRlR5GZ@VpY1Yi5?o80Oc)WaIhA z93OxpR?sDJf8>`IxGtWFRWr$u$}gr#p&KP+RUw;7=P%gA0FB55olYqou>1x@@%>Yb zQmzwdxU6M2B1~oAY2oL&_!;JcAL+olR)JUZi2A)-BN}=2@n`R!mfixdw_9+1yO~u? z)?o{_2o?&r%tz+l$udJ_EPe+_SG3WTBHpili5SuQwIaIsuG5RX-&gY~M=Uxbw2n)z z)hE4UCLJ}Lwz5Q1k-0#N&8lVKQN>PlO|J{u8^>98!46gMH#J_{5_y6knmdsG+Q>2JIu$UH3X z2iLpz%*b$iAAE>6A?jPeye`3}|M4oXlY#_%^A}#n&_{E7#Xz(l9hN4WF3797;Waba ze@`x=0+2WewV)1q+VVfX0c(xZX^Z38WIuYHV~bvdw$Q-~4vVc-V>gC9sN$f3_vz|s zWlrc_JbcT9)(su>6h&{X#X^C!9-$fIWZ#{5+Jk`GM3-a~liXjzGeS5g6~}8kH4pIN z;d zn&DgWR_?ao+x4zM->xY(aTdAyqVz(Ydfjt`H{NCsTCK=)*nG>@cjTN~5!XE;H1VZ{ zJpc(bb6rM|``5scwp;Qc7sppf?deD9{3_{8F~lDhWumj@HEgtG>)#U~sTG{&~n!dZoMzf)tGSow5SUU+j_txUP5ngEkq`Ma zYEMb*gTiB^G>3haO4~YHCy+npbQh7Ko3K^`0giSdxF~^?sZfggHg?J^u`lLrdq@3% zlHjw2{CL7(y*w)u|GVy|8Bf}4IiKFw0=3_9FLk|UOgZIs+Lb8YQ}u_Nw29W^sd`_Kp};WY9`fdh%V6klY&;FWlZ z-;iGNja&b_>HV>ZaxPKcDb7-pT?>t*dEL90EQVR>Bocw$9-KlyVP8FtMp-2Z>v&U7 zKws2nv>E&QeE5}yg<;i`rl^E(jR{`|x8IJreC*g>I~z#|e7={b6(8ccT_V{3T+6UD z7SC4oQI9sIS}@U5ZAse6s@8ieee4nUi?<{t3Cj}eEY-!_LRZ4I2Zilq z9DTk|4x!jW=RZ7;Px2~gmFv7uJxn@ywPZIMO@cl<4H5Y8O@X!*Z&EZtCWAaXo-g8n zyiC;@y>>l#=1eietckMH(yZ{h2oph%jR+v4?an$NM^09GG_fW239wGZ5vUY^#R&;W zH}=6k_i=;&9`IJ;7^N98Sbl&!Fg!Kt#<;qEitkKrV;JA35m%DSE_5^~_JK3pt)r_i zcnas&TmFYxQF^;}snJRolH?Vq;Q^gEZJ7lMABD;bpPlkW(=^*;Y9>cyX0N+wxHFFR zdHp2?pCQ$+#-18lP6tbOqF%{TnmU}Ae9w!6tKfvrQhk8|d~9fjzxD)S(F%Z0>)oD5 zK+(Qaf3`2=5zYbBK_=Ns+#CQ?|iM78%hJuDD-9yt|tH4uy`XrY$Ud->H^1%z5 zRtfNonT?0cZXOJMHbuX^hst*FI@c|K0sq(!w!81n9tUz~%H%6YSt-jehfTH< zm!L0`g*s}bx7#@l>2I23)9GsuS?rjDq19`Y&fd4IK<)wr9JU#52J08@^j&0bw$cwp z+9YG$Aua92!{x^4oZCzV42lg;Ed^FyPV-8Y^L^XO-Lv@Dh8j@;-q6ZoqlDNcFukHf8n(iMWb_wRp}2-DJRu&q0FIHUDX>YiB)Oq+;6*VEPyca7wFdEw2+Te&@cYJY8XiGni#u6? zyr(73A=x`ZH`)F-uU_f#SWmu>H*>nOC=dgKMo|nA2PH9VQbT(9D||H(+Mt>BJD&8C}u9S5NgzEj^h?R z6vzgShpV!%X8BHMpD{NJdJ*|}77fgdRWf@Bk?TO?)ty3tUY?ST{znY?HNKK^6IQvV zm^+bep5gJ!q-`F9vJu~}Cx)-4yF=9g8r#Z9clZpMc?7YG}F3 ze96c;wgT+0{6g*vLNC7pQ-M6$&-aT2 zCUv&eVXe!@@S}^mMciW8eqstc{IEsFUBx*4-eCRPLD6TZ*>-)Qx(*P!+2gyx z%zHE+bbGh8@9)JhDoc}i8L z5ohd;36!CBF|QjQJydMy>SxMl9luPHO$Lm4-j`-UL(fIp{Eox{$N6lYi=5R44z1aR6thj0X&>$1Do zBVAik4PK^GFVa|Cx4Y zvT2REkc#r-2DGYrQ;g!%2mu8^H&70&O*}eKGVEX*HHhoV7x_ zU(UcsOpbp=Ocp4z6a2Ew^$%IQ~fK(^4_)^jXSLd^_1<_{AMJ>;|Sed6m4_{v1apRPQDAJS*+hzv@mMBp2g zI~HtLt?`_QE+khqFWb!jx^7prp0@Co7YV_#USQOXe zy{W>S!Z{2+S<)Tdv%B}}nDvND`02Yq1I>mNQj8RGX_+ne$&Qu=T2z6r^F2OAOE z4)aR&288uVbnxZhgAlr||3P>&rFCd)^%&5CdM6UAhn0N$yfeiW#8XkeQlSitwH~I9j*J)T9(uPu>0xr>0w4$e^t^0LCa>dg1g95z^H(0E)HTDK%w?= zA%5ekq1@#Ba}JsBcRu1fqSAr6@4S}p?c=UHa(FuA656`wMo4{MTSRY0J$F0b85EG7 zIcJjim1YtD;tUF)V1&+*%V|K<0?rf00%${924Xb>9Xq>S3pM_$L#cnd{D z1DjKchAck(7q5abzMro$X7mALB);i)-_5q~LfJ7K*?3-Sv`lK6Eb5I< zYmGf*S=K(Gb-Kb0qM%b2y^6WZw_Dp?kdeB`vV35Kx*hqy+c<$xx++x5#Y`7$eV9k) zbQE9RuN46A81*@nQsApBy&z=MHSP=Bb|YCl$WrM`;gk2yqrr(C$Q57tb1h!9!~o^( z&g`?IKXLJ|QyG+BsDIr&Q~$=SJM+N2U!t^NMeIY{prXV$I>irdehYRq6F%WcLOZ6L zxqp(Qsj16b8r`6u&uZE=l8}GV8#@1nZWf<$C}MJhXS}fcKMU6>E_&zHXWC9xN@<%A z&m2t_OgKlwJRU9_j9-^8H*O`tL-mS;tp;Z$ohTedL&>CPyJ6F0rC8H2!ywG~BkyZj z?>o1z3dutBnxeYbv-pVE`>SOx8I&V;Ficv*DSJ-zOP#)Jzlvs*!UBrcx!<`8d1JA) zQV6CZB8a@+Fk)b`G|eV0oy*k@YbjeHm#1aS?3s|WY)thPIHommo61+T!#Tr;o7c)N z0$Lre1?4UP9%B1s!D9n?T;y(_aHEvp^QV{u6mOkpLk2v%b>tQ2(fQ=iDU609@Ep*2 zo(ROL8J4~aIBkS5=>MA}{gThnLn`7vr9Hc+RzIM{J@(SkOn(FNaGz0rweZ$*?pMR2N6%2oB+H<|e6jp?{dtEoYVqxJVkY|*xGyH$OLDQCyYRda zr}+RVsgdzW@r#p`PxCv;J{DctIxp%1Y!~N^tfcyq^j{YV={XB@ z^s?*HWd4J=_(<46^*bA9lUyBU6F_Ku0YYPO3%CS>U(P0S=^!IFB$2Q<9h6^piPa~D zVS^6lT)dsZjueJ6G;+-|ICY>WGt5759=B3eEAlt^#f)t({hq%CI2>eYfuoIsQ@@uoV99wSSk0oqjoqscXQ zk;BXcJPL9(h5U6pA0wfiF2aI63rAkWi*4(_SR+Y=d1Wm2nU@RAoRfYf+_)sYwG1)3 z_+8Rc{OoY0m|ri}gizJnCjEBqT+zcP3^9Snsx)s5+Oo z5+c(VYHVpQ_BLI9+XHrnJf7KyL1~sHZ%xnepKJFdSnl@pYw-K`)qJoIp-cL8g2E}g z$O}$7ACOy0xLvg95Z&dA;H5uFNwBohOtcKkRf}?#^~u2C{^Dvf{FV_P4A_77)O7t#4e$NhcGy_z3h}yBm~8uX zI%=ZKFin($3_ELS{Cqn{WFWhryRLa4fm56RuEvU=t!J!}Mj}Y6ihrDnX%!CqDyKLp zE)^KL`1BeIs|9GKCZB!!;BC8^us)XH#@F*->XdwAO@|&#^>KO6Ch$UuIHE(@n^=s# zoQRgnfr8SfZDLIwy)4Kw^$zQ`>>BSW+i$5Dn;oE@_wm87n@FMkm3s5c{a|33H9$V; zna2NlWQdJmtc~cP<)PMZB=?d$WID_}8_iPgJta698!&Xg7%JCl+Laywo`PWW9B^RG z5`eaNuc4r%(~dySts+{TO#6>(i}c2wsqPhy@z!o4VsZESqF;Qi07_pQg#e1I8jhU? zAWTsyQecVRD6`Y5^brWv=ru@k;1iRdTj+MHbRT|oeB(Twj&h%PBRu@0_vD6Fk?e1J zD>W4TZhh?xJakO0Q%NU6dbV)nP3-50OI$+j1Q*8sbX+ahkX$Z|p}A<;=z6}#qry=J zD)dWnZFHGyRC8BhK?F-bhSo0dHeO7v79@g-{WA(ZPVtpR6N%fxv8E-vE7gt;@MqQy z91n(0dm)E0JGc5|ZLXqs#VF3%X3nV|m$SSw=?XLKX=YdYu2}73P8wE^?6&q-y&4Y_ zmvoNE_)g}Ww@~DXrc29O??t5YpKhSGKOALY%N@+utTnRMR_<6dXEUTl&Hb;`aP?Y%@H3$5BS))Bl~^XX5@OMA6oKO-?;XHRw>cz4+(^Z>P> z>l%{JJq~P>8YS7!USSgcmn!4xwRG#X#oa5AuNXwpe#q_9EP8ZTJm|&Zm zeaWu${hJq1_ig6ORYqjJs5NNZaN>uDA!0ABbPUTKGBIaHz`gdJ9Trq+$9-d#BqMQC z+aesZtgs{fs$4}AMuX$zcG^H~B2UpIV(aPR;K>p-86c$$bsNmS(S`e^%b&tQqZJL_ zyE4>pJ{*(E6Js>nyP0v72YCTWj7Z&|iqV1O=$h8(+|PgD<&hJPyrZODN{(~7x#O0Nlb1`(~xU|`1Gm{4Ied;5^k|=_k z@l={%+k8m-s1*S{J+I=BlSiMAv*fgYxC4205df33_i<2^_JA)4uPegZLph>f{#4*Q z=1j@~fzod6)e3GO#QI1uib(JWzk4Iw6iG~r!Bm1{WhxmEz=83BtO>a7XL?AeU%yRT zV`AO6XadM7o5d5#LvK-D`6L>;XM(cvQ5`p&F7~F{pNp6O-Jc__12*BJEF>tVv?rys z;V25<{V-|Kh!Ov=@*2V^uV>*KZ7rPk<3nJ2=}NBPzk>&XPVU|7O9Qa1F$@T)yw(b` z_l!C0$LpgPzYJ|QfI1G|jeS+oBosFJ9ZI zGwPI1JUdM=2tZ3ld%;(D?kIb=H(vDcO3h^>ToIT7&;h3e|)oLXBY?JnC<_#sc%nCmG= z#?_uMK64Y3)5-(1+NEh^IJx$fg!=6fF&$e{YAC4yX* zbxyalB1aLw?gj>5X)6I3(aC8SEjArXH>#lZL}PsO@wpEtnwR`u)cftc)Gy78PWKuG z7f{*8xTD$urPF;Ms^|{w_#a61H;t@kUL^|aOr-*^It;< z((xC4sUhI^n&I%eFOq=j9)8%Yqa?JdE&J>}kt;?2<&rhF+lfykOm~4nmL>Bp(E6d^ z?Rj6mNqli=iz=h6-K6lIyg!|r>5HD(+Uo7}uOGGU&tj0-GT)E`m{hnmfms;u^nWBL zDQY;v1JIcrechaRztV?e{hd=LPFs(^i$q#U*s|a9)28`FE~uqrVBnUMTwL|2{a+8c z5f_aEz}f5v_(1eo-C^Mrk6__cK70HP$BSIXuroDc zI;GXBab@p^OaD}JP?YK{PwWoED%jj6Qq&WIIccO@)_f9i$GJ1ph2Gg*Y_|X=n{z!9 z{ZBj+RUF*-m#qG-Y|b z^n#YlSw*EAm?KSsSd0OP|8NgTU!T$6UH}VxE$%(Xz4yL+!LiKPe4(9lMqAv{-KaQu zEAw!sz8@1{HC1ToP!zH1M*m%R(HnZxps6##96I8~5azn*E$DXt8`1X|TbRMn`%J%> z1>%p=7AhxupX)f(5%ES~xg%SC4-WcK;g+HriX=pwJ}@W(BB8|m2c8|<_vEFLxSntr zw{vbLuH`tPT|D<-ssL8MV#c}ifL3wg-iB`UAL*2@YIxfZS*~o0?b;moFp>JofVPl$ zR@75bS$}sny;hI_cvcP|4vNfR*r*(ZQUR@%QI^R?Tr6+J@UFz;i2%CPMHEkl^8k_zTBJh4J*nXxp!$*J8uDRu( zV9MVjn?KMBeF)M(hI-i5d{X5f5ml7P-s&L1P>J3|`#W3H6whj!@X<|{oewhUo$S($ z3cY2J=dm-;2Ql-()Dk;eaKOFj)x`J0a5BEZnd`j0+SeC6U**C28Q+RQ4RYoqX=IDG z#s2c8_2Nnb51;fcW(Gn+Hp7Z$i41)>9=mu!e^lUS+okDNnv|tGrJ_w2eDIBwrt|U) zXgIz@4RwJIf!m*#ygp!5PGa|hT+jv+2Y8wQ@+17Akp5YfB=wrxPtBmRFaWwP&(?;{%TfL(p z+`+A1&Ps`g3!i0oUudmmwHo%qjy$QK96{=YJfS5{^L>oHQBaxQDh^0OqvY+iDgo+y zob!!%zGYT13@tFqv%t1u9p{b8BKw%#2@AsFOzVH3J^%4rQYinS)O{oNjZf^S^{#mL zd%%|gqfSV`CCq^rYOiOlNYay0+PbCNFIOW3Z0@VnAF|i6UP& zDN{FHzC+E7aGVB8)Os|(&Eo|sxaEh0J@LZ5nmOj7-Sj!l_;oki%p)@deh`u#>Itaz_7XmxWu1tl&ZuOs z7B^&At)9$V+{D~?De^z{v$aSlc8$9X(<+dXCxND1oF*V%TIXs^<2p*UT3qvI)Wb}) z(@)L1kxL?!hO88+CSjVO&A8&Ekc2o+oj;>b!t2>Atf4oR^EK9eSysP!bxNZR>>J=T z1=$8?Lp-;8f>h`6_!0c?YIhe^azA-o>ZJ+#v<@b5DO006Zw)?I1THrN8(5EMebEc6HVcM5mf`5?&q?q3EH12)sVlObDqITbJ-m?`-r*f&9{$38AfE_rN>Bw zCJT`3Hk`qVh+BBZ#;N=;Ml1>y?2^B%^~Rv>y9aTZ%6nGLYByqOpoZCy{Mwg;A1TQ4 zV)>>_W>d~9A(?N)J=fXF{SS}!FUj&B87mV%%F6|7(uVMuy*4i}cWSuN`XkC$lhQGL z6SG)9aJy2_ve}dw<7iX+CUWo4=+km^W+h(y1hD*A#~&P!lhVl&J-yP=M6Zn|D)^IA z_-H9#Umqhm?LFEZX|Ij_k~~g9R<_G%)W=MAt8lFNIiGS&L&v_Gk6xCdH8>Kj%EBij zzCYfnBAoW4nOQkt?GQwPPqiCM%ffJrzXm)xWZ4l)(yt#m zj&1VoXa~X)xDGY|@7VSal_heI3cVPYf%|X)YOM0hkYqcpf(YpS>T*&?mgrH0Up)R z$eZFNi9vhdf{@2poNUyxI)Rj1f7VA=*8fh73H5LlTTjV2FL;US$?Ysj@qo>BXJG`kX;AnL8%4 zled(oXI|LtRJ}m6CZt%mMIg%48htGCON(B`|0Qx~!a#3xJ}_!_F#5(x7piXV__2Rl zyp*Qf^w&3?DqjXQEd5%q(lN%7M-pYlPXusILo(Izb2LbKZKyTCB_~I;(y+!&&30su zo^Y+8)n&v{Pv@=4C3gy!ee0ykz(wIy{hUQ##KKjzX+?V8(2vaQCO@FgfQa3H{xl;! z^Sv$_e{$^}PWd$+B+C36zq zROwc|bmCt0vjdYM;TT?>XcwwrKsI{nkCaaL#SxR3TidSb(5X&$`w92V-yDE{s!6la zO`8HtJOdHBE)D=unIxt+Nud9&UvLs~Z$-mrK-Ha0vlN%|^NCF@MedKO|(iuvY(+jb$9R+#BPESYmU`av6$J|){)nF(tgR|dJnnVd!|4e z>|3z5I{k(dti<-mv ze}w&PDmpPD;C-z0Te8)_TF15&e+@z@la&`Q<1!^1co>u$o^Aju9A(SoRqQ5M0=CzA zUeCQ)@=rnnNun_7UIJ_}9XZEd$grw;G z-@&)n$%TSfaRn3p0ZC$?j(qMK&{*|iO%+P5$zbqG9dn{I$5A^5!dL#!-5-f4@1!e?s z-4LAi&=Fz%Wfea;9QI#k5)s(^MpXP_SFO_JRvdb*?a#T4+J^P)im;GgXeTg zmeq00_uX{CR;kN<_&2sPzDGWeCpK zt7Hw*2YJc|jDOfvknAzpUbG<(iK7B$4%tcWSbENi!cQ)8GisJ~HtNRZ z{>ea1x_@QE7qa$TT+4pN_Y;r6<`oPhzx(ac85QGkKejk&zN)=`RP`W`rk!lA5gwJs zE-T5W&mkQ7yG|cqm{-YYk^F=y`|OFnj}W+PbEyH{D9nVC8G>tci6p5<9Ip&n!);{X zgX%<6{}40%yN>?ni<3kCXdMz|x&E8^p~&pmXuTVz=<5-}`#rh2gpi*!rua zF|_munH7YRfYR1r1|!04FQ7c{ax9374t`MM(OjAM{~5LZ`EVOfluE#}ProT*6JVXN z`bF!EIPAu4k^+BSrcQQ+uHF+(>E+p`8k$JE22S((X_`bV8l*Xryt^6~%x;<0|0wzY z^*FXs5kFe&&{%2e4hn}m@rscDgLR-jibrp9=fEm6g4O>v%*A^AZ_xjL6(bYq zrfZPyvrqPZ2+9?IF(|B0vXK0+6lvcHsBsI5_ zB$aZ0%=kPy_qm0O4X$gwQI}__#{cbc1o)yzQPU!(n*5$*;fD?5nDuf8HF&C7$|Wl_ zgsBCNc4JNap4TsZhZ^!Xx#fQ!LHHkYpd&2G=ZxJu&BO1Va`vB{b~k6GSvum7mW_2P zZ0uyo+ysJQZ~yBFQ2K@epD>I$x%i2ni$@|#mdr8&?QNFC-rpu;?g5_H5}n2jf|M$x`|6CNbXB&W{#5nkh?ss)%o+E4r6h;f(@GF|My?n&xE`w@u^b# z!TOH>*sw)-81NVK)2r7hDtMhac$yln5F3%O{xaf&`TaNK|LQiygTiZr9!F&2B*3Ax z2H8QCQ=&ClS**kTL_4Nk@%xTbu(DY>xc%R+6_&3}odefvXF%gMf&4OUXQ2eo7U8Q>g!=x&5Pz zuf^%D1#JT+Jf$oaP@R>&D8R@S0Qowb!^Jv#Wt{`RPvGdEYPW=!6luNv{akN+AEB3lRfl4M|Inn<5Ro;y}MnvA6w>=@Fc^X4YC(7 zO(yIeqL3;;YXXO-f6)_ZTLW`P|l2V-|f_?;WvF%a5pw zl8((AdIp`@t=b|SpkULkm-Hs#9n8ipg6I9 zm29%p>)3Jeqn$6U5*z_H#Fi3(PR)vLng*PL!ZuD++u&{+D?+V3slJbBvw@aj39q(SU*Y1ntJT zcj1bnyW^SR>iI?k(M|>TG#G@e1rO>K!22I!v*1?r?&I+^BeW2hcayud*{L>ZK2PFx zE}hIbsQKV!8zBw7pu+23s5Pq^a=bByY$b|f#`Ob!jc$45^flJgOqUO#S)EYnFpMRa zqso({ls6s*Kd2X4TwU+e&08cA5=I#8Y^2(04j)3t4IOJJ_`PF}?`(=P=J>9xbF;;q{cxJ0jnxqb=Z(dONI&Jz5&3!3L+nojYU{+l3JCj)7 zh5QlnN+>5s@^Zs?z&mO(dRR@wmVXa|+HiZniY?9aZ1!U)CCIHBI-vdj#d!Qo1ZpskCYIfXNMX2O`d0?XO7x9g1}LT@A3gsff)jj4x9yw^|q=XCIf436Hf)n;-aIfp0dH46aPk zors#Uk|hyzEHwIP`Jt}X_Ow_7%PpU>_W$eV!gavmro0v zaV6tC{q=-ONpJM18y8$`$cnkAe?nS4d94>;YkL-BCfYvGd{$XJvBX+$QHfhLdrwB59+7^!@9|!eE z2sieI>71EvrMitbZS!XCqJZZND_xRYtY+jKDX2i*O)R+f@5`Pqp5nFDMGIwPuUudi7d!Qb9>2l&i!Y5eHtMh#tS^FD1QBp3_Hz*t87*CN?3j0&n4(O}x{`mU* zuu7;5ePsDgDl|uVq_iFRJqbHR=m>*|E#6#_6g|VYrQFPY%aSaf$9lRyYSqMSxkG9^ z`{Vrz+bQfQE2qg_#OR}BOe-T!3{*xrDj+lwO*oz8kffQB1q*%P1u@VZoR0(^VS|l^ ztF&t5a#kEwT6C3^gWurq*auFII;Ee<-ttcs>gaR2F&<-1FuHqE4Z{77)E8%oS!3mC zyA_^|_)K(PbaENw^h+NRcMmwX8gKR=3tfytLr>Ilw;K`e;L6q%*?LE|Z!pyTi>3}| z)w0i;O~v!6KF?u0_Bc?Y^0@-7nK;goq2h+KDoB%aXUkzRKKc68dJvS~v^clorObkg z$UC3VQOl)fSzvnunF4X5eQ_)NsMRE$lFPHqM{4K#FE4;=ObFGno&$E7_M3qs8jgJu zXyqpB1y|aOV(1s1lV)l9350LHfxEzNQ#V(SYk|c~L;*w9Haj}BX~*@A#_m&@pGH8- z8;)ml&Cvld=HmP#IIfGWaX&7}{K|#W7(w`j6;in8v0&KyEJQ!Lo?{NWqzCB{J>i)9bJcR{1( zVcxXaw?r5Rgerf1j~qGb&2ZywjKK#d#f+#=-#pf(z+QD1t5Qy18+XYX%!TRcm zCBM!Tb2p?Iu@f{`)IF}eT@%bex0#wAOwz|nHALoJ>;bX?Xc`E+Bk z7wmm(BKs(TpLWLZ;q8Z37@y=kQ}m{Dw)bXXs`GQ2N3 z#U>YO>Dj?2ri654BgpjFOFB66hDBb6@RC-)qW7(w4pdcPKzXKZS=w#i))i>?fd*Ipl0*L}*o@?%Lu394T0C&KLC$Ec6Nyib-mROLnS z^-fO)>~B+YVr^|-qyYIKFgHr`TX042ZQAYm!UJ-H`Cxq~ttam;^fxx-`VEd911kLf zwuxI)Ik-wmh;zr{w)1EN9>Otl!Y*i&BFm%EgF@Fe`yK3EPL+RkJEkQHlQhXXhTqvj z+E+=0cXu9x&!EN7cm>20Ria2)Is1ciUq_qC=d)E>=Z zIT(a{`9?gezhPkza!P|yw+8Q%1Lc4VpY05H7r7b$h3>ps;4xdG{Y1ne<0E?Z&8Wnn z(MAfr{-O#k-&b1-_18Se&>*NNez=#1@I{r=FZfoEVGz-D)q}g~PNeMWHgvz}FcKPc zQF)0>e85-cB2$Cqb20H#tdM#|dyQH->wI3iw4zjOSx4>Z7+bNCPFJCb)uOyyb`uJ# zx2j0=CPljeOlXm~E5>T2@YwNAsRDr(4@Er`-SMs9{ zZB*jMM!T#;2wM;8#S?v#Mvo)P%8}BAClu)!7KR9>9PBY-VLLf(lL)EjzFk*ToI+8k z9=^k{^rtr5x}sFwBUOIQ_kDb)(Mort9M+07P(kMQ1)oR?31NIz9LPZWLQUF*#7!qX9scTtTqqStb_`8B6sh24WV4_BitpfUE~n9g(zmhp_6pX4_ah#A~= zIgf;hxn2_A<*i|=c)?QUOboD^yGG%kW4O_kNa+3EyBg(5|302yFxW z{Po3!vj5`-B~miU5Lkxucm}t*c*5r0s>O1gw}7SNY-^J#xYTC`c7y>TF@L%(nCy*U z+72KyAdXt9x^P#lY7uEmhlj@&hA7MHuVcR9ak7OxNxiwdKJdpptkau5BRI%QRC@M# zYWsM&V&sXIV|qjW>%h({DBFuSN#}cTLlis%zJ+I0Q#I$4B+e+R%fBoo(wcWnem4w@ z?xKkCq#5b7xR-<_y_MoEhEn%X)GEtyh|X4Nk}Ll-!J1>O&KiQ3Txp^^o z%{C;24JH5TMMSZXwWq!~%861dsF0Ls3Khp_x8l5KNH7lClxDZaCZj3^Q4)$nUwI-k+M!=D!N)h zSi$_KwldIW40jCmNqM@l zI?fe|jY8}cKv1OO-{?-oI*DQITM)2fCwmn(el0uEDWFL^9hY=LW__JqpraC#Razf) z_)OsDE32C~YN9#lQ@GJsgvZzS_~HC4V-_O1c9!3I`{k&a+aBTZb% zU0CU4Cm4tfob1I=#g_^Y(oT<^ei9I^ui!=^0?b#dd%T2WU2GQQeCjI8+l7;k=F`30 z(O^Oc*H~|uiHSa7b`0-S8oLNEDzu^ZKH%z36)y=(@m`RY=j#n7Uh$W zs>q@$EP^^p9$myaQ>Pxh+ldOYDVw5X2}!ypy>;8|=JNUl$grRqB*;UD z#7RsrAQ2dTCj&c^J39@ZBDW@B-^C!}7z_4SYL~+t3rt--?32IRdhtvAOqoo<_TE0q+UXyoMJwNO+G)!ecnk=ZoY8VOAKGL%1_$j$6k~88|y0+4z-PdAFgcm5{<`EoNg}iuy&K7Crs^TyTRvqhP`*WsP5yOmWeC9 zn-PqoZ>_bvlbWCRm+6ZOwsqa^sq&+Rckw6^^C*0W!jOb!umX{vNHa-PdZPpO?`AOS znJqy|`avc#$F0HhHydPLr{ta~IzJ_3{yFFRt7VE1d*ORZ(2vSm*bpuaqt0{GG|{vF z^0lMIXn8yV$7B@j)au}4 zI5VNXpEU0K5F+X6_owglb-&3XedEcyA<$blh~mB3O{pl>_=UC_hM_J)rH$k`)7|g! zt5m0(C6fLo={xMpL#YNc3P^7J`AAqP$pb``iaY^d@`6*xILkeoRjZV^*Wy$KVy+p+Eqei6@RwFYhw;4FN;i+wUrEygFX-pCbD{6DaTbUz`+c z1-`1Z1B^=8@3q@7SZ>-&LeT8>N`1$ky+lzn2^WSuQ2-v;Wbg@F+yP5p>E72ik9lsP^d|NU<0b)5r5ANN+R!6Jw_k3Lots@9(`PQAo1!85PpY zG5y*0PH#n{96uQBqQ|}dHI!_rwCwt&ktDe?aHY{m3-R6^~;Vu>%;r zl{*VmI`tQ;S(i!qfRcnXu0G%2!6cC!B<2@mEHOXc8G2SV0K%<5&TMRd{P6dJR;0AQ zxZPCyd*WqU{cMlXmY1iqnb=T(nR$Bxs~<^|7N(;rd-(LYRWxHbCX%`>!P?fWEWsPgSuwjJ zNz`o=o_^8>5pwP+ertf1nxZ@x|J4u*>_lKGrWfViyE)1|1B?o3^ihouG)U@=7;otA z!y{XtZA5Kbmoz$asAw(kaP?F@{@7o}J%QwiGwf3AAa8MCE&ffGB;Dc=YO2_!Usn#r zhlM(;7_5-;=HquKJlvR74o7ObTEBmj@g_k7edSQ_a@34G*6BCh_lR(_mtXXbTLQId z1KhAaB~mS3r#*u2C)y;Vx+0=_kAsc`VWEzZfj?gA3)DVceih3d^;7ZMZ0FZ(q0LLY zHIHwlGYq5YsOkeQxXv_usb?LOSFV1!V-dntPgA=M=3gxl^Ev9)tABjJHYKG6FV3vd z58y+n+-k1eWvH=Hu2*>;tPA6$Za75Mj<=4TQB?vD9CLAK6zMmoe+X?dGzU5SVBZBZ z_uJ~`04teWPA=ijVSDflv|cGhGy5G^O$ZI(1bO2F;WZTfIo&<1c8^PeqGy&C?L|(EdnAXT>=V7H_|07-8l>+-6hhg(hWm*cSsIB(lIc= zkVAg+%jbFDZ@quby4S3A$3Exmea^nFeQjXph@P#vuy^K!ahvIS+HlJ$N=EoS-4&u` zb14xjM}-F1pXQPB@;eCRL<=`n;&=F}(u(klA%%R_52NDzY$tlsD9zBf7n&IPPR{xL zbSXP07~kfHiHzYF7KRkk+bTFQHop`lY~&v7N%KYPBjn2Xxix=o;OWZyjuikK7gwDW zmkps37w181LHtF4DGh zsnzPRcG#E4%Cb$@_HeXE!y)ycXtOFvX$mVnWrm7WWoa19Ik%D&Nx#t%kRTnl|}E_W$m*n<~Rl|Axzl`WJBSzO`dW|HL1;)=`0 z&_FsjV47#$X%uMY>&;xaMoy#s5x9V6v%AxVR zUB4P}!tfJ_%PgNg#^x^6P&7%!|gvJq1=dS04;6NG^1o?^r*am^t5Rt zTk^pnJrm(eY6t*c^=S)O_7qThvLt}~+~r(8n|i71hkp!p)Es{(_Up|ABLq;?b=H5T z2topXv!AXVapjTVwZ6+yN9Q&xH!OH_ujG=clHA!uKlAeFt&-Ryo0r6|{XY?XjTQS| zpcca`m3e2tE;qM)=K-I7k18`HaL3Xwaqt-=-Kkn<-XpEx<2IY6+MRDLara(`nxB+z z&vjW}oB`l>LYLC^U1i`x)LAuY(H_gp2|mXnHpssK_IufVxUzamx14b)q@1kZUUWR zGs=qAJL$%~bYpg;-h4Ox{7<~tw6D0OaAt;MB2 z(FUJ8M(@FM#Fm*kcH-(v^bFbB{(6yNEO`+DrY5%*I6gY`lst1#fk{u_Vx6eIu!I}D zq{YWijxA#U{zo;5^3}ul7lWaNAWsy3hsrc)?|o)`X4OuVz+nYZmnOe1)ouQ>;Z)Jw z^1N>*+(jHVwHH`Xzlu2g6kmHz%oh|dUbrGIL}<7?{VbKvNnQ5Lmtb;DVw^ml;217W zgickquX7N)oaSDGPRy~dp$87y7glas@=G$;Svi@BD0b4G>i3Fhy?tD!EaG=zokA~c zA~bJS)ADJ=9^9;#n+TsEw7@~xt_#kOlk;C|Q70K%j$7t?SXP9jaEBysmK(?;Gk;I` z>vQuY@t6tPIs{@6bvWak?$1_rp_tH~nkFuH%3SrpG1}{>%#e>-=ZhhgnI$}G;$^hY zbkrlDeC^r$cC*1(eU*f4mu%bUyB3&F93Z}AYm%6d4;Jb>mnB^|`>D>^uxBluS%Yx8 z?A{==)vUNoFI-0gu?F4=ybqr~D&o>E$z(zJFP)Co9YNnyY-&#$AY6f$z$Tv#Z8t0) zQZ1r)f>s76Yzh56QDSw?&-Xb+4&A&}`wgH!)|-)JgF@ycp6wv5GpbLbUSiUS@6{ho zgc{7wg#53CXe)O_c*?=TA7tq&AE9UgU5UuGNB0)AcQBN~)n~jj(wCEJ0)Crz=5%Ln zfx2JEx6H~1tr(zZ^cy=X)gH?s(r?2&v^!^Dwoqi2fp>2ncaEc@tIXBa{mnbWhx)SP zDE3>6O16n%`+1YNTs=qT=8_v|9zo3QH~Acl(!-k3&?^!Pm^nyXWyo`^fFsU>1}B>| z6?Cf*qKy}wGMgdLn`yVCUF|ijgo2@*JD|C^A!4JJ;AbuXGB#-d!Oa~5UYMw7ai`{z zY;sVG$X+;Pvc8RCQpx<@1FF*#Ps8r<+B;2kxug#)bGVm8^_Ciq`-!WPXz4~VT`sp2c$oxd5< zB#9SAdssfTc<8Mv-NvU?j+}*fuykgLc~(8!pLdS!sA8f)Cy`6)FCL+8sW$Tg;c$-Q zur4vMPPIxx9Q&?Zr7gX)e3y%j`cfy73vy#;#yHyx_Ib2ONVg;ss5CvI=DF`bBEl-q zy|n5u#KQoOsJHhxPv@`Rj_o5vOxGCptaH}0f#jSOP|2k$M0TY8f2WDMge3(w`UCSJz1N$2wT-Zdg=VfwX1M1?pHASZkxzE4S0OGt=`1UnfY6 zKTJC4x*D0Znjsz|fDDD+wrbTc|AM*_{7#$1Gf`}M^Ra%k>Aeg6d=LFXoL!%3ccL7F z(UbSms!VWt>*o>%{p%m!Wfg!OH>({?UL87gT~?3De<~=kph)FQKU1+CE@Gx;B}&|R zvBZmFU2}>yc~${2k7mTL@(3QtcHn`IMWUJEOzHJ@N&0uL^#*|DXlYCORb6jKls^0@ zt;07YHVJtZ6CO90=Zdce;2f#F;aI=Kaes9oTCHmM^WJT$ePed(ptVbY&Jh#B(l$reQ@8fiL3jQGe44q zvsNsjYOVERW7#t~b*u%6Z4s?^8t)F{A2__f)CO;f7jeMvPj0j4L(zxXR>wQ;fEE)! z7`F(%T;1Y{a|o=sf%QnWhQO$u6twM%x!TC_3(Wm%9CGh#n`W|;ew}IXxkclQn5Nu) zte_Y_r}3q!aK8S*##f1#tv`t5S0jeKA5a<$InQv`yq!4z z-5=!E8^(9Ltj0M$twH|%Cw16X%;!iS`QBuYlgAg^An1K=<2-`0W7PNb(wcvRE?Y;V zt{5u!-M4gPQK7Wz<-I=SS07`_Nk7?VwlEzlh2vK_2d3NKRiO>ib)h<>-39m@ejE)e z*d_-^5r)#SLl>(WW8KWWPvf;8qjWSp?_9sYFe}KD`W9(csSd)Ru=5&fi*qmZ-z|v< z=;_XCA6Yu=sQ>Z#fx~K?g(uPjp{S=-7^IT%#(l_svnyotaBNaT?!=t2WMC0h265lk znwzbs?%0I%UP)gg<-LAGuDIN9&r?9~n(-X6RC z_Vs?fbf*;$H$i(wJ&RKb_jBpGk6y_cAdSj(<2$!>*+g#i>`|B`#&Cu=cB$+|dFC`i zlvVqtG7zK4!pe9iosJZAPG##F9z(ED?H+01jbxmxws3WA?rIXZ?_=AY`Dt5jS0xKI z65ZeYJe$!NGKDHR*@PM21(;4uL;w#9+LN?pT3DD_9BQun(#=Yta1z{AG1zH>OaF4I z9Fg}PGTA&#@0a8`8+wD)yUIp;-}~+MMCd&tRCsXYAz=1>-^4yQy4Rh-MSZi~vRz*- zH@)US%!eE+$hixIVSMmNjVLP0B(v`WGK?PRX(y?skL#Z=JVqAa9jF&T|5E3MjMOg% zw`h(Uop6*}&r|#=!#nrQQh@H&_}krqWt)(j<%cCZlAD-L)WF+GR~NHsR!CIFyH60h z4v}J%_zY{?VUis*^vfb!x^g+o=vGjgJl&X4$Jw0cIox7SMmx3kZh17Xxk*g??)1d+ zJ59yL)v1QcuTV|N-KC;d#g7;Evd-6a7<;7kPqNu#LvWHY0WTK{^P;h?WVr;iqFY*ghjKmRBOlvD}`su#QC)iN` z8@wIJBHL1&t?XHEwup?w735$mg5P4nZFd>m+=hv?KBd48#rF&2GqsH^W)%pk|L8J0 zSF|A+X~gCOZn>F^e5PGG9+}+oQ(K;0q^_$hGTvb+{1X3-?K#y9P=*9XLWqfu=Kqch zz2Pv!Wu&ud#R2S9#Q9`8binL<AW}Qo6rZg6507Me9j5E z0-eQF@>%aTI7b(mtyuLN780KJ`sweEi?+HehA}KxRWO3z4C<(DLo;0*Mbv8ZSZL-o zp)l>(SG&t2ra6*tWQ<)wFOx}+fTP^huO-F>9DC#he41_iz3dH z=A{+UB`Y-_e0CbF%#jhB{J4dwZHf)NDRJc zL2lwzJS{oP^7`s|%*AD`HZUghKs__l$!@!zjQ!o)6az<3;-%o!2W&6#|FEZ;Jlt#ODMOm;z`M()}kxm9lVn0ArombsggLgcDU> zKt0p6^sDLFar%#h&{6#cRc2zCsWp3AiGGc;Wfz%ca;oquDN(|w<#I)eUBwOY+Z7PD z7QFrDc6O;+J8_p(zMpTl4^*%Yo;W7bl+7L-$)#=bqSQF;(E_Nlf(QqOY7+%)dc zkdd?Hrm5!R@Wh?4|Kb{>!seO4O10cZh|v+bkeU^V6?gpx1>4e385&TZC2jj!_4ln9 zXuVZzS46ztPXZ^?TQ$YcT0i|G$1qUSitf*E{^Mu=Bf5IM(?Vg?y~Jqs>9ZFGqybSK zeVOEvDdElB*E?13ORc{M?qXVp!I%Nf$HoIZQa+zToIF&M?JO05+nE+Njd0Ue=CTsK zCR&Q~AU5E(Awxu*cGCW9evX=~7(Uaj;qRmwW(osK9#+Vg7I|G=WHxm&w15RB>Tb=O zMpEOl8o>nrPr;!BxRdj>@tqiF$*Yc0THK2tD;r3^KB72u92`z!Ob92QEP8D}m9JEX z{sd+LE#Wvp74i{#b4Qnq`g=QxKy(;=U_z zo?pbo)mWOsUDX z{9%vPwVT%LJ83_cgEL`W8AD{BcDw4N3HSNs5GzN#n%PQ{wlN5t%Uv$DXpEff6>i%z zY}}J+uRf>mO09TRo`#*8f%9TG*IpKzaVBbt=2yE*3EyzUDk11Bwn9_=Mz6elPl|@( z{G0D>dpjp+b`UySs>^VHUB;R2`M~{6)@^|6_*dpEZ=*IuneE1)mGQTgru})-Ou^C3 zAhX!#r8A}V(Y|{l8qqqS+jbBg}jO}U5_f1P`Jf}qo=?BI18;I;AXpf%8GtnB3Ge`Rl-E9ZDQ&PZ- zW_!y+kofgk?yeB zT`9Kcr{~nZw!52Qy-iOpMZYS%r{$C;bgInlGqFKe8;QcM}xm4cX`Hoj;50fPTVcW5`OMRBy_bCZ`6lw zKre#puMnEWdAJv~3A)_|Z6rcuhOESpSVD5l=-62QV?O@8pD9!PbK}m81PCOH*LSbu5yh~{Upjf|w=7NKi>FVlhc>?uck>roH&W6sv7ZmT6 z*-HTy!CoyC_{$6AY_(#dn?XX4 zCnQ4!DWhN2)(P`b{C(3SXQ|(Vq%s4v_uk|E$G5Va#L(J?3vL{NH`L+?^Z2!Yut1b`AQ+ge0|CpZ3<&R&CEu)qvsG$ z#Ye{%v&DO;4sqknA%no!R#int#B+bs3&@^PX> z|2`Px2`&@vQY|J8jh)b>A4--mD9gRtOzX2wWVW9oR&Ff0WU84$Q+sg8QHP6oa&Bt^?J!& zpw+J0OkR;k7~;&ojIgxq6(_amMlbvqznMwe%zVph_zLfX{^Nu`_0t{I5o*@$4Okiy ztmP4y1(C`n_gx<_KzwgacOl?N=7Soi$r_=_GBf?%$<=rB&1!*}v&tV0DA3H9l)-}^ zkUIp28hIupdVnWr$yuIF8K5n!#=zA;h6`z}Q7kNUvDfJ8E~6hXJEfl@jFp(70;q`h zGED-$bzoLBFOxdtE6v+y3}B$(o3y{G{Z^7Z6IWZl>-D$UIzlBsA%`^4#&VRrxdozIy}Y}wEPc^26d<+SbVWG@ zEwA4`J5FD_ylmy0fzsYC*>VExYp>DU58IYSV4|imsJncK5zcKV-t^?Q*fKD=MBn~l z0gl*SfN?%|p;pW)-`-s&o-F=A)aAkZ@ls38{0{2 zK!{TzkCu6WrdEaUc0gNF02ngfii4N2f9tbQ>h05BY`9u4V%fzDpmDQ-N;B=Y23!L@ zTMt`>9IAcbY*l+?FCHlyo-yQLr;v1yoV|F4F2;sdq~Ac9l1XIdCjEOnmmc4VA5rJx z=`VQAnI-7Rqni}-BDk*&u^T_Mg59(ouGzySuLfv-I{4_r5{aYL^RGGr6F|nXfcSVAHEs9PE{5qNx%@C-B}!Le6w7Ka1L*&hZbQRJ1boQ;VVceYt(1 z2J4r4Pq>d1hMr$`{6+^|?IT?v-QyHSzx{(**nJXfcl_;Xx)~LflD;EOlrY^G4Qj z=2@Z+)m(LBl=mJnAoQ~9vDKVVu4G)k2#t?))tpMW@gr}|ap-r9vm_NN&y=%zRpU!l zHO*En!IOfyMhP4V?1vq|L_92f@ik@|z8*1-oJZepAfmDJGE`!Sclfh=d>Ro^6Sg#n zS=|aD{xRnygKHrg9+M`+_3Qm*)fFE=F+n`1-+4lkR)q5Rwzv0J`iLRQ_1r+ehTj5R zwY5eSu+rxuc)q7z1|Z4h({4#g#%;`QoU9qwQ4Gvn9dC_+YmGg3opvM9^r#A@Vaw{B zObf)`K>em`w%EK_wc4ieZDn6;aI7cwVx3k?{s1PUo$<|ns{CizrXTbZ(to$6I;-XE z{JHl{FoE>z2>>#>>Ripf(CK|mNo!sE+fxmpwQ=`m zs2Bj&--x%-p*3oOa=H8U$BB{Sv$o>MO6{TB+Ljr_oY{D*11%NeP_tZZ+4a3~N!L7# zX(MIl(e{eC>D%)qr)CvTm|Ip6qSI^+TrsFyKxKbz;Cg-7TpthXRY=CZkP32L$nn?s zw$VgULR*1rH>1db@(L0FmjGeoXE%+Lw+`PUGo<<18J2 z%NBp`t5oNEI^^|faq)2x{oh+R056)#-rOfPSL3TC=7YQp(){#8KgC(cr4$kPb+*?; z*g7$(-;hy_m(K0=U4fh3ZV94xJlmeLSkb&El9;o+B|~EzN0?;+yIW>hmzg%Pq@);g z_GCQ!Iy@s7OFe{mW3C%lT^$fd46>j0auqQ5unR+%$|ALn@kc3a&FSD~`yS&oBEF7q zqyZ0rMdNDdq)2I)rXK0-X&|NnZx4O-45xm~QB zxnV{ih18ILvJ}y0?&N#f=@J`7B{FDm(_Y#?^}6;m56c|PXOx(zy!TkcazTdl^vNmw zHJ%uV&H}~!o)ftV6&OJ7Om_S9;o23^gDzX)G8+-)8n)sWWN`1Ddw7LsVQAl5M#!yV z!MAJM@@mB(+rxxiAP=Bo%@gmKb5kI(XzYjPYQ{`|NhlO*a5lGEAE5n&R_KVSQzQ_u z)$&2%zzEi!XNLrzW`%2B$6FaCf>lJBwp0CaX&&~z8J;CNe)qfkMVy~3PfYsk<9m01 z+V0H3ZR}qmybeL+ADGAAzRwT@JYKR6Ba&znBf|}{7Rl|9AG@jo0k=|Fm(D)jEG8!eKgfc0g~!D#{K~3Q z&&sgH7~ZtAJ0C|n?`Z7jPhe}5;Y{neQd8Bs)ZXlCp;h}igWv1>NK9wG!@z?eHrAN~ zvpTk8^|9pS-JjdA?wF~*tD(^6206~;{r2a@6$Y=Ya?L^TfIMkor)1An$q&@Gueb%= zDH%oEIW=cs?%q0kjSDK`4=e^BKspI;ah#rEmctruMXH!^F7AraA!elqw>~f7bE0P# zU7@snM%xN?w;uL-n81F*)I@bR1KNG0;KTPG-&aC#h_HFBH8U~7v;|u6ehUS>`*CU5 znC_*yS*E(B;$Gezb0zXchrvtZ^y9?=;~sxhUYg$<1N8By^*Ju~U+_4Nbl>-f^X=}e z`ov;$qfOl1fec?XywPS1eYVej?>^rsT}uA73m=OO2Hw(qtJ3Oz83sKOgxV8(4v46u zoMyG(^Jct{7Y1IGy-ps~co!4bP9-Etqh?{e1`VAV^wb70%**--fP?!XeeWA^#JUPy zkZ&aa`Ymm>1{^mKO!INmQ)3(;7{46lddg!~BMk`f^^N_u#3 z?zEWYaFR>g4TDtO(s>^q`J94QsUACC(XidJa78L5ui4^lnqI@Hp(|1Q-Jz%bR8R3t z@HkF{=1jAa1xmbd`)QO=vd%8P>~l%1V%CNrvr&MtxK0)Qfm_>yme(<489H37CE$c6 zVeQ%=HLlDHt#(IRK0TZ3L^+mi|0<}C2l?z55uSEVOcr%{ZwM4HphoAWKq9{CyjcJoM@;%-=v@ z(gfZ2i+?3)Len07XXxWx)OxRKddqn)rn>C9dbSa&o3SjMJ+s=)WOht|c^1D{W~MM& zq#%$*>MQlTdp|Uh&62jR{1q+c$AAZT^BYXY@%IQ#;yW0g$=U$P09X5l?+g3XD~vTo zdNC718LuQ&e;&73$7Ma~uO-&J{|sQP)E6!RD($6dXzV1FPtHt5UqA&6(-ls|eC9iL*TZF5WJTp;SSxSj zvtrGEtWgJ-;5^MT)@&``UX2mfjzV>ZO=!`SxvUIyCzd$BK(meJ{3Z7wHKl@kwUrfM z_^oa?5cg|rLEX2`n+%Bbr&Y(l1@@Pkwh~ZF``n! z1t)Y~B8nT@ikAnV)c~G@?!}%WutiN1%X+adGT3TfXV=uic=i}Jg5z|@tWt?}m4Xq# zwL2o9R{YHc#9muoYUDotq0Wv!t5+x;e(XTKI9L+#X#GcWnT`eI5sl!p`cBu-`Ht~{ zh5SX5p!8@^THd(D>1;k870zGRijI+Y$vh~nM)_l1 zlcG%Eba5ypYXWW6vfFhx{~|x+Igc|B7RBt+ey!R}V^Q&n9c|cQp=&SOOv7i%w@V82 z_bDffmR%y{U`NnyKn4H|yV*^;b~6R<5~JD#R9n5S>29z!a007G#K7u*eSbQCT$QUK z){L%>T5M2@Y?@5B!Y;PX#TO#l5-gjo;z2WwxK+wl7Ug=Qoe5Pd7FV$VY$9`Nu|h}X zXtNXN)5ab}^yGa~w`hxygx_PMR9K}CI;bA=Y_ruI-;tl$|L|q&ynX=~)w-xR9=df; z4^faUgf||&j$GXro{yXFr7Y~nF>eYq^}kS(tex`To>H_aO!!1tA^$pSxwwWw9Dl9~ zGxx%|{h4Sk!FGGgP^C#26YZEmvbbFsku~%p;8pWr`qKgCSi#%{N>^At)4!o|5c3F4 zBo~CIA7UH8p@bf8il}s!f8v7oc*dlfnMuIZ_YH|%*txzi3o((K$$Wq>IAeA(ZCtUv z!Ij&3#&u8mz~NhzzC|^v)1?I(Q=dm$A!oaYM2wJK&gcekymH$Pjb;y|#r*wh+c1_w z?sY8==1Vvt&E2o%cPERmA_eSKLR^|CXDbON zOa1<}U4B53lIbRL>}O0PrDJ3|2Em7b{obd&^i(arX5{9L3~YemnW4?O zRjm=hvjSrpYb{Axye5I06NhxNA_d7AqC6x z_&!vRBBm9%EtQck+I|Q*+E|xB`eM{**mxgmxR*;BRHVL(f=<6|<$P1L^d8tm857kT zLgsq!eLkb+5!*%dd-gi35)fXWOv`PVVoP9q;+yGZTg%be=PhxgXOe%pZA6)9Jbj+N zGjfi7`V*twyBv7Bf2Z9u%-sIsP2t{MnsNTO+r2F83NYDNc>)eSh#G5n^LtIbqLa^B1haGB3TgD*>?Xz@~mK1x%qMbW%m zloPZVI6?Rp&n(CNohOTZgvLxG)MMmJGfnPYW%q`r9&}hPO>%n)Bw06U;#J^=SH>%S z-r_O-+0WLilWL@n7>Rt9w4xC!%4NK#y2*v`=NJT{0F}@E_QKwhXqyTw#u=14I7bH3mnHKYQrw&;&jtI8P{aVZU<21p zyNdiCFrdob`P20}ChC61r>sC?>GZxRhNVrtR^hw7t?JqB= zTbav6E?aBMMR?^jEY9MPt|{tbs~*jJ{id0!;39gVsf~LWv5FJeESQj`$(M9neWIL< z;XZQ4ej#Q;JKs?6oaHO_;O&#w&Eju*&|%^VH^)`Mj2$|Jaj~(!&sU99BmRgBd0C~( zMcdr^Azqq-+b}Sm|5jU)p?XX>EArQbQn)AAL&pK3@uV!hts5SdSNSyF{vBgd9monI zyN2rc&p4}HW8ZfJk1g+NrlOm396xrw6Oxd1=g(}|e&056d;=hJN4u>&&^I zgsGU_tn=i2zd`@JjL9RSD!PF~k|{z?lQZe9c;$!|zcoHmhYOL+{Cd{X9Z@+uGvnN$ z8EwL@wS8^tS80`^hvo@18HAs4KoEiGLbdIHaS z8oakTC$K~4*z3ghvAo#lWcZ_dIpPfaK--;~^tFa2MG|QCm*og2ye7CDtnL<3+wEH_k3#GZ(L||-9VP^NR2LM zoSkWste7$=O>Ts4Dk#nl%Bz>PO=4ZH7smgc$4R38V?wAG4UV8~0WQLwrCjfdctMkw z@!u_v%mZ${r}Sk*rjL-tQ96%aAZHl0XC8uN;$|goD~iYS*7~ux%6$h*_k0s0%3_5$ z^Nmsb4Gy96H84AAar^&gisc#!h^`-X-j4b3HXy;vTSE}syUx0au0+^^L`uDOxReGq&HNiX$Jey zsoJA+KQUvjcQRfJ>H|*Uw~dIIFS3m*f1NM*;;551|LR@Zp~l=HZ*G+%(n1)i_%9;x zH#mygK746LB!~J9%~q`t#d5~5p#C64zf>(&54-;wzus=WgjJWgmlGam!I@E-`L!Xa z8C#IJAu*kIEhtMFxj0)6{S`KEDETL_IG0I)S%0*Q+?Rs>aZUTM56&$_;);HWa9{kH zV4Tl%$fHY=^+b%Om5Fv3zI4&y?I|WQQJ)$8h0t!Pi*pjkj2AsEE>Aqntf=n;)p3hb zoOu{mgmQT%HPKh)9hkw-aWTro%MB~6RVKc_$LVi?<5MWTsoDZW5oP+Fv@Rm2pa z+~wHm{Kc}qo9mtTzKl5P9|!yoUh&t{C}L3v*j4AoUv2he$}{~F!ro;KzFfuzt2AM6 zq>Z|VI}WNjKqB7!ZRG#;Q}`a!yw3nofqepf2|>D%Z;+`gp=nvm)>Jv*5TJ;|peC?GlC3j`M5(H_e1n3nv*L!H4_Q z!1H?Zd^X6xQRIJq#Je0z`nc8F56B9dM9Q>L)q~u5tm;rIQDXY?b?4UugbwGZ8u-UQ z1@`_)WBu=!h?eSz9(s&)^pV<_ms-_b+izRjd6%@jxi|<;utyL;Jv|X+MUFmSDgV#+ z4|z9an|bJS2o&!J@pVT}IayJa#wBL`eManfsSf zqd(ArpKCkcrBl%h_hr)eRocr|gB_Shf?hScFHTLIMDy~$b`y;b`PXbBB>v1sWb~k$ zZP5>`)M7pXH>Y?4q%%bhTkfD{jV$2i=pMtQXtEGC$zkQyk01Xr+$$`9(;G-5 z5Ak=ao4LVSX2P%jwG>^7RL+t7^g)#0*@UySnQ99?$CKFgZ=5dn*Q0)7|MB3Q*XShe zU;`s6G3m879b)yoZPKpO#Q1gdo}KVKZNjwwnD*#9{=hTO@~C@?)G=N(f^yg_Dt7-t zRLBIPCclpzzAc55Y1stTyvGaW1qT*NeurAACCU4Mt`59z_ahdu6{^_d2DXfpE85p&~jCrLr=h{}YApvCF$agb<<6=ySf}#=Fpo=USQpHMSZdx#E<^dvlVyPbd{L)Z1yIr z_F%5HtNHqt(qyfqeo;Yx%jaEg@}+jG$<%*Ne1A;*UVJAPm_bTtldIWeh9rQx*1MT5 z5a<0vOXc^VgzspiD$KcDY%Aqf;NWBl)z<1|A%h05a8zUK4-568s!g7-uYf9m)x3-K zk{8GtC0YFrcZ<`&9Qm`arHqpUFxVORL>6^CcL@!-OK~RpBd2K*wiOK#zCMT3Umw;x zDl=22zVR-$TWQf9yXlcbAYhIk=^!=r@2)>&_eD`U0x5idJ+N-M_tW~IiF{Rt{8V;U zpnR~vT?uluo-S0YLxy3XH9zwwVNaWPT!RSQeE5St9PsIod&5&vGBTMX83hPBCbIij zrSg7`Te>jvF^gKphU&LUr%_k7KT~^w(dc(N4>9kW)}1WV5V=kX7eQ8`ssR??m6%PQ z3UNEGeto(@!Tk@gowCr`T&-NLg}> zz5Z~zyrRrb{}&WKqG+9SVUwln`Svtw1f?~Lb?+~)wLSFa09Mpb^W*G%a7M^*5IHBu z^9LMZZn98OVc=WGYg^sEtC%fn4EMRzwJtEH4G^L2^Nocu zX%qzUH-Sf9;?K=tHp|jQ5jwTtiPiw0dD_SoDp;c$3lSe##xefJx8Zk_Wo{=)3LZ@_ zDz_ZIjeX0}4JBi|y*^KZNJo8T*RLPo^z%y8rE_TCevj<>b&}@|X5t2JQ8k{lh2~i& z^i8%IQl|bSNka8()p58S9pC@pbi9^_07LI4j2wJky$9XpLChz<<{_33eOuLCZvUXH z|Dq4vC}hBm#|RZ=i8~<~O{2)E@$7HKlTUa=p&(O>A5AVIN8^1%jzr?!X`gFU8)@EU zc%N)SAosdYaCTTJXC1$Rmi=OHeiu8+hI-iBo?}I>KxEM?cMRR`=4UVH=J*buXSoll zaic&_?~PRL&3%p7K?2zr^vP=!s*n!8YeNA`Q^CKQYOkWXh&GEzp{mu(S_?IHTHFuP zPsv?7b!8L^Jj%*O{s1Tyx@9QC9rG{Ne7%2%C-3_yf-1Gl4lLDc2!xO4okQ`s6*#mG zu*JMh$I$!^%{X^-5LLtjXH2&{-kXfs6L=+O2SOLk?JM*eR-+m&%PLx|gQ#}x*e*Lc zVlG2mD6;S6(b2X(ZCtW@%c-0U4vSm?Sw6DA)}cE@{yLCj4&Dx3arq;o)W3{l)7p-N zo4iOz*hbv`C)^aG`?K9M!f!|!crxarN1aTwD)lp7O2(M<8g-1K`ged8iDW_p9A3y| zheYKZVkInm;`7@=CR^-SjmM9J;0BD@P~J6R+c96!5qpcNt!S6c&E$b(jz(2Kud{md z)}~~Ybgtp&P%qmky;OaatmQed5k=bEP)Igvh*t2a>%*HZ*7V-@s@1|vdNeJ(0tS$J z+k5qr+tj~a(gwmx5P9RquOPR37+2K|$tbB#A#J6q8|G}F+!MTgW^Duhk9V*V<2aQJ zw+!7$*I))h%zabzj8C+0Kj-{OzD4Oa!q;e|Tty!Fi!BRph4G!4or!+B2fFs8)jZrw z8%6e~8B))ylyxbWvOo#|G62lcjONejHeO7lS^{pR+wdoC<109$K$yIl2 zv12i*x;uL4A3o7klKj9(1Jhx%VGUC4xRzIgFZ`b~uLfuKs`XO$ z!JZ7(^VN+O>$oe`-aM)8pT3{&O=$K-XR`%9IoB+~stl)^Ysw2wyd~#Cuv_PA?I}|) zqz@5<(y-wb65mc)Wu;NpLuAXCbc*7i;84iki-}s?(_mDCJHv< zIv;IhsAM`=tf~CDYZW2#4^~Lp72NV5PWzm5QLV+EHWYE8r7c?l$DOq)9V}Tf1}jZ4 z3di_Fjy>)oG_up32ekw3l8>kur&QYCPL{%`r(djS_si2x*8{YG>0X9s(+f4>GI=Ry z>0&jLRa?5dOW&hMCaX5Q+_+{NUsKCopUc;Y$9%YcWX2JA(91LQ_%Gk(+d?3_y|dOi z@r!ciZX4@!BYXVt03(_JgtOX(d38?_Jl)=`e^pzj9hqzw&bxs@Mf9uXuR4B6>Qx zR>@^u>AsqKgaoBE1mJc?@KP2S7XDyT!i`G>Zxaty*Vx?+_R}(y>D9%p%CCXS;d`Tr z10ZCiWa4Q*wocvy=|1HTU!X4}*;lAUwfu@CIn(yesH(T=zs#HlPQT6&74EZ;tQ0Rj zdSE^l>1*PEweg%XoEcY9^I%kiP$Tb=xb37b%t*U5jKJPO6oY7;y$G5Mt8lb>w2JDHw~zRVU( zZww}SuO4FU{0HZYl_5*%VnRRHTa;p1^s!4ztTGyp`_;%(>Wm)_OFGMVpO%R|;jYbAsyL;?%T0XaWTcyI5G~-yD z5Y0u3NfgW#*yyO!oGzdwwxO8LXG{a~YnU1IIzlNO8N`TreNoKhf-o5k&uZ(o)GCwJ zk&~Vxi4CW$ib{lua_CWKYgon8sZs~OmMXnW~@xJNFtP0xe|EywF0{>~UNG_pl z((7S4vHK6>uY`i>#_z~!KR|hHv}~=mcj7T3J)fvhsIy+LeS3M}2TEnzN0Al>QtFv8 zhr#azvw_FN)R9ZZ%cZdNv(=0H3vGSeVdLL6km9o0#Er+5!ZL1`os#Aogot82U%@u;VWg}PljT5I}9$1y9HUF*DE1=UUud)dl#GRnWU8cTyR+g@MH$-0pCP+)Y~bXvq|p+PL1W(wl(jL@S0>2wWuj?Fd#)ruU8<4VPmEyg zwJdpUN&rozol2V;EGuU5QiioktFh|S1nk*bo84<(uz`9NXF1!sW(|6omD9@-BBJN> zoA74KlQFWq)abUOSp6<{we39MMvs%$13uAkTFg1?E3rqP7#ARC|ax1uOsijIph%8A0fR6q93J&UW3mCVh6 zabNXjZ6*-%+WxA#e%=5@h(4DUIxp-lT~u=0C1ZMZJ-&=LKU40BXmDP^i(S*@e;*kvl(`do=ojdUHsAQ&+eXD ztYI(2_SD4N(wf7PE;I#RprCT5rfqLYG5*wHW8-#xOlD*us`t7}CEN63t~9GZc1jre zZs@CFMQf1)Q*orvILEG zXBb?;p>*KUYSC$pC;f*c>`V1$s-k-JSIo^Xg4n2w$V}cl86X~}5wYHVclz-AKdJSEidk1oB zq34MXMMtBRLC+sIWP1egxDlkeQWmldqcF=-NR5kh?l^OkW6R#*YL{H%DT=MFio{BS z)WZ08M4K9n>S8V+PAZNm>2%!bG8rD^VnM9P^QR;}S%Eq|tO@FF#evoq2XSM$whg6I zw6hp8I)pe6yH7Ve&rv}6ziFSBm`735p2SR?jj{p*JTH@@FZ+0dREa_*DLX^nf{&Tr z=l2h~RVxjM2|H|}C`3cMiSw5Y@?ozdniF1{m0oZzfb7^>Su_PH6mzY&uF>wCz+=ntbYTauW3=jr3Y2m@`6$9cbX*_iu zYEz|DpgVbmse0ymVJVH+n~!Jl-=AmVEhcNPkTFvVIDR$56CDuqt=u5zIM%5#4A2oF zBzW@op#zPWKsGzx3Cecw&UneSl=?PmI?ib-P*L(*=3B{}aDeb*E|_pCQ)WOGE`T}P z?d)lVJ=}@{PYqqC!e_JiVj~NKCZ11ttkDX>;Q}uhFPyefC;p5>Ig?ECp-)yj(OB~~ zp7w80(~9mF*cQ+Ti{CcCEX0yNPdzOIRd5JDX+6wx{^I=nAAjC4Cez`~F>5Wr+kBQb zo5|drxH@3*(rtQFj)(p+{Wy&$)MRoQnBhAK7OpRfGzu)+nPvqEDyCkmqquu)_#rdeg|e>8FF@pi5#KWEK+W z)dv#q&#}ngZh3$FO#-*`h0Ss=IPv{gs>#1YCgeeG+CMaiKjwqH%oi@mYqDEk}T4KT#?F8&Xg@t@Pi7>R zN>C<0lg?}}AB~%Sk;ZfKpnPp#qwlrcx`nVtvh;tMj^Ai?5Fg*xb1h$GAgIzY#8+i8EiyVcm|F0yX(uW-RyAq5i+0twqc$a|0w}&GI6LA8lqon1jZ6QNl>Z+OM;W3}7xP$)z@s;NqzRQ&Hi z=8N}aPf+l5{X=T+LJE?FCf$p1MLm`cCtW^ERV+_kD-m5aSf1({g%7)F4~#hevo+)Y zn4}ixr*}3I`u2a&>BSZvxkW1BNE~}>Q4C*4fkUo%M?nyC7qddEDSOZVW}5$D6KsZf zD$kQnu2Ep3$^J~!Q_6x2OaqaEC4=U0oaCS5603%-#hOI41?rV1{7PT`r!V;b>slew zgmRCFOp=gAgFEs^MlLZd*TTutX{NX@PXOv=i@vw9k}zXl?G&)f--&fnVxIaI2vZ~Sy zm#+VI@W~jp2Bjwb1L$WGFE7WiO(RX5|LPkhwK&!(Td&7~iHvfCEqr~?nh2GA=1)GS zlQ1{C1c>@~eH)Mut16!QySEs4`92yc>btiw$rpUQvqXkF^wS7MULV`?E|a7u<~;@N z1bd>ofND*kQ(C>tapk2HUUPQA&mPqe>d zW@Va5=6Aqcnpr50cFl=xY}d=iV-Lvt=eW+lj@`eEF)NI@(f7sEya(?=|1Mj~%4=;a zDxi?c?9pC!rK+#ms}3b0p>O$dbcZ&^O(dWH(}Mqc5}*tD(-+70nYN`J-^M<{;dN&n zTf`kNi5JI%?tL~&RQ;`A?e-<`@4T50mGqK&o~j%?q>{Wrlrz9YBs9Dd`CwJjG;h-b z>CFj4S>n95T%PMY(C!#r{Eai^;mkIb4xuJl_9xtI_kTSrS#09b%lMLr!XV;PIHkM5 z@v$UZFU`1Pv{?%9Fx|4NwIj|*#WVz+*EqbdKPhrYWrHT^%&t1H@NF)W4n2;P26a)? zUF*iot|$rz3Qn`vW0?Zq#B@p4S}7N@qE%yIT|4>|+^p zHCEJ1gbo2mi<2hb5HXqSBFbbJhh(rzOI1ozUHk!2NOKY>vdp?>|#`5--tp^n&&tc>OO-QB}n{a25(wwvKUQxvFJC#RUztiH~$KChYwB{oeLvfC%s)vJRcGXTmsn^GKJ?PD;J=DO`Tyx}XBLr^! ziEjInoV`#1#AW-<6ooRWW{ImA@w*m5B|P*jYZf$WmuiCZRWn6YG6d{jhTbd)9VvW$ zv(4gw6v|NeiF%oAFqe6V?RYxtOwmLV{BBue8O%@7;0T8%7Hl<|_!*N-~&qAe`^J_b$e52mEj*kJpi+Jfm zzz{QTxHAwACFK1u`%J{?w{)-F*kecX8C*SE3*_4LEBJSdVS#InuM}g~&}T2YyEeH! z#+th*Fx$hk2mLHSHDna4g#Wu!5}qiEINSWmrWb$qdAWse{-dBG?>|N)LjHF|f-g)K zJJ}{dFCX)30EYJy1vjD7g3pUX0#**Lkcm~^kJ9Fhpb1H2R7d-Vuw&igss@RgWO2mo z6|WrbRH5ud>X@-$<|#gRC(C30we_R+yS%|2F?}3;!{&0)U+?koo@0$`4 zE>XDS{XG!%Sqz^C1wbLG1wqRgHYly>%b$!I2Ij1<48t%b^8v8a`s#=K_Vp%~oZwSt z#zR#2OdfycTl>YYs@++n8``}S={MGT;N+ll11 zqj?}Ib}xyDoXyz1+FW~CzdxSJry;hu6t1&=zTZs^h%j0AMCN-yY$%5rLWzg7&dduXvi0ExY1 z*26)DYx=Dxik@Yn>pW`Z9+pd;p2HgyzH&FoBXav&_U1WCv9Aj;;X`=Iux;MF&M4J# zL_M8ny6ogBz%~B3^y|3PGL#mxeIUE*!0n%ranoGI-xG0jc^g2Nq{1c2t^e?)H~e=gE1e@uXziLC;CSrE2oecXE#O^6 zjmf9!-uiam=f$M&_4aF2bxLa2iAU`QZ4anT%W{Gs)4H6kT)rz;e;Dpo>#;NJcpXv| z4+}`O>Jd@#N>{F}s-BE$Ya}qvD#w}J6=!;(co8mP=7`@Mvu7N}T>9`0%FA)F5fAIu z)sV--LfyCTW`K}Jp`AV8Ix*)h#AqGkNoJIT!h} z0;1Y+n+bN|Ck6D|$f^PVs@o`zq>R~w=Hyl*Cy1?=q7AWFaZzOtRdHzc(0Ui4yJvf^J~+zx#6~2Cpef=2o#T z%_<}$aaQ0z^HB_2qV}^jdC~KZnB0$IG3umjmQ+vlHLkw+T`s1M=5Ji8aMvB30q@MhnR7gefV$gEWHSD&{)%dY{`aef0|ENDr;tP3>f}F!iFe5CLK#!@ zb~2d{BxPviW8dS1WCy(4VU#ZuxE|ne_eEZ%85tn=VN$7Qh-;7sY?XL8Y(JZm^+@1*_+_g?=e10yY6&P4PLG;mZJy)b z_%Rn^KyT&|0<%=@%Z}OFHhZHYwqb)Ofu|4e>eNlQF3{aXjyK*qj3K4L8c+p){l){k zur}oP`BQm9>fb2#mb`DjoPupG%9eU*JJS;sS9&4wT6#^o>SDWo%!_0d!)(y0@7<(s zn3TYkV|xE&KFH8o^w%?&Fns zEzc>-3X~iUGpon|jV`9{73b}u0|Bng6(p)AD_4W0LfSpi?S60BuC&c^j9;*&Mv~X1 z@x->PWk$h!3j}Q2pnPl<4b1v{JFmO9Q&DOFy5ODsDb?jxA^h`|;YQ_v0ZHgMM>tdEdp3vWH%V|R{DI@T%ux7nBJGLPgMgBq$ zml675b8SVrlLx^6h+>b>57Qil1jUeHLU!Bn<}Ex-U;ct~s@Sv`L~|5G-6_lEd`oKd zvX|Dn?9SF0QfBHW#MS6PyX7^KjD%nz5*9eL1gl5fYW_H(ZR-2mpiBaX1TL&(@|FH- z#6_d%Eub-m-lZzBMQtv!&*X(5N{LV3(SurJsgxnHOidT;t;bRtMga!u_K6!0Y#TI* z9ThlfNFnRIPNt_;%7?(kJN{8dpZ7}#A0_59pcq>+Th$u`Q6=H!{fSXS&l3!Mt5J3` z79!Z;9m2TA1BtqMW|aHev@Kq1Em2Qary5liFUr}VbRx2^-iEm!s4nc)f45p3+yaKR zg&{ARrTEbOBS@z+xYR4sRe4zW%Mb1NpnrjQ|H#9B=7dTQt7YB!|3=f>=x&Q+$O!x& zq)NRYXdVBDDg!2|nk1mF)-S-y1wLPp!KgqdDVK48X+$gmE%0u0UC$9TzKu#QAN>Jq zX^RIwMNjXY9&NE0_+qu0RUy~HE3#iPV}0Fn!Rv4>?3p+)ckg0ah9~6K?8d7E!f6by zvz~)`gLgMAHP~BMKIqL1AFX~n9HetEsW5_fiC^B&+@e`Ej0cZZY$(wAocjo20KyfC zRZUAuOF|QF#*W6v7Tj{#viJvbrTC9=GbOSYr|AJ(_L;gJ3(wa5MHxjX&QQ!RjE!?A zh$gW!&eCd>qoJlqjjQ2SpTTFmrK2aTu zYcsCL+(_Fw8pw1>Nz@Qt8rV@!6V|OlOmUMZ^NL(=gi0o0d?EoNdOUZl0_d9z+n2!$ z&N#Z9V$91vxTzmlNPGKlk?<=)Q_{-Ol(V+$o-5B`)?BxWig~KR+Mfv%1fcc%VM-?t zUYv(<3R?oZu@htOCU69OfYCGapdVbc*oW(8zfNGdH{uqbcqqr&RKnlPh&sP02s(*U zK{?Y3*E;Ob)oTSnd$?Fxj-p_E&#lK_q3_B)*V)IC44&(3r}37%AVx227!>xO-(K_W z?)2nKk!q2>8oo zZS}zH-}hz6&p~{&{ciP|&0+Z;0-y24BCyG~#~$p9sXs3Yyc0P4Azaq;FduY&Bf3?J5+gw#$wbjx|NjgBX0Yzw5 zC9Bfk4OIY5OLE27V~BALfDFy;GCn#1qd8{AAdz)l_!{{_ppNrjE!p>)0`w>Ug4F+U z@Ez~rl+;Go_Mp@xY%;w^45Tl(Gqo@#H(PLI>MH3LBs0%QDt}NzmLFN^ z4&GZ{QssBC+bA>+KKu6y^Iz!SLMx6n!GOBUW>+6>46KMDFg@sZlVMRdQ@sY-`imul zqHGJ8WSEiy&SJ5uvpK2qHUm8=T1xkG=;Flh`ibtB(ZmCV(ATE9ZLM5tYLzc=e*4Rp-vKMjK+N4|L|})S_Y_i~ofCxv z#;(6EP`qbjz?i{Zq0g$rzm+9Ptz@9kEG?s|AQ?2g)=yipr^k9t$}+U zgoeB&O|eD7brS#3eXiwPVJ!Pu*noJaI4`n9yBxxPAj?7+=Qa&3f1M zEe7>Zg>bZwG$-1zF7GgQot^F&Yp-832_gP-8~iJY6d(vm0*S8Qtigg~kq+V1#hc@T zd(Ulf_^BhgTEb9kunq{T(!hDE(5&~YiahMU1BcJQO53tkZ9NEy$aqDI$wpf)$6MR2 zs;A*>`eNLG%dmoj zstI)PmcHx!yTZnp+zY;yR$c^(^V`#lWV6l1dBAlg{mtjaMIoq5vOMJnH4OC%feglF z^**Kl?${_pzD9R5Ybv|1COa8ZPfK4NB|{N(6+B_}QfV4w*ob##-D+%hdH1))ktrPE z)=Cs|I`u2r)IrR>=n*xH$CGvX`Iuo*q-?TRp63|e-`n8N{%~^fXS95x zV(C8S9x}Y9O8N5NC1Qex@AnQ3+8yUgYw9S={>}<9vX9iGh3}XvegeJMA$;=toK-FQ z8Jk!ZYm38PpwB&-UY`F$71d;e|Mu^o)9oj(P`-E&sLo5&K(X^ItcW|JJc6P|;492Gr`3g6zqSK^8#{EaKPDBg2J3GlUG|qnoe%uwDsHj{>-aM0{!&>>dCPk8^k`ty~8+=Bbmt2~? zt{wEuwJ@Y0>oDoiN`Ed8@!s*Z=2X{V`ea~69p{XKEBi^tiB`nnl>F<45OpexlBB|` zoD|3R;lO3(#rX#0>^Fy`-K=F^=(W^pV-v3-#aNOZ7iIZZE4IlJOPM@XAFded*#5Y; z;MEMrMWZ?^wGUxPBP8$1b4mZKa4GK@Hb+JY+mmANWFGC41n^I$FOu8D zg)q$I*I|)sdf@j?2RLm)3wzV{%5vm&LBH$q_qk@oKt3<+9bLgP)wH>k?P| z#fEC#>Jq|_s|N){o}A#jPm?tk5RMc${V*_N<*u|hGQzN#`H`{(s<$I^8Tx2lJ<}jI z)Rx0FvM0qI*zKozf9xfNC^COR051(K9TmO~(C>U^G^V|@?_s_>z_LswGH@<-45 zqfl&&Tv7((47jE0Ck1g$6E}r`#zd5?uMWsR;Tohhf}8{ubTN%>tpK&yCRCP33dyE| z*ll(fRLP+k6=O2KgIcrHBs| z7)s0(`!vSim^e$n%!8f2;?AX^tNC#p8UyNzjP;^&X;l&&;q|ZZ7BAN(bmDl80Y`eA zp>4CNz5cU_Rh6rHM&9X@3lt$qGkW4rhLpDCphGWmK`;7R_|ji!C}J}hLk$}1k70}T zr;suSa>KPEwbM`P9)E>}pE*&FG?EGZ_gSw&A*O%|@v+z97e3OgCB(raj^xJ9Hnxom z(`|sM8^2ov&Q&ubcAuAkH$}0R zspWl1d^aRxPD<+P0n1-rzlWW^G~_roxza0G<-5$&l<9*Wug>!rS8b{P$b~zC(i8HG z7Gu70c5V!V%lu+&z%{}r{!E#r*m78B{K>=KDCN5oKi=xOK&o4MQD`-p&{j0xHf`ChmbgtHDMci>J*U*&ygK^3A zL3-xSnm%Y~+4EB>c~9|d!>q>%<+J`eRsvLk*QLN#N})h=oYWD|56gtM50_!u*pW3V;C8hn+}5h!2zk>6MWVBW-;P`wXZc1S7KDdBF; zw=>?pt;9%)?Rlj;l6*gZnm+pJ=qaXo{KUZY0M8?D<+K<$!CsNgJpHll%I zQE6?t9bBH_@r64Cdx$1(%k+1>cn`F#ziy~{c+pAI@bZz;5gImoFa1{f7+2to+GR(V z6EcDS-OMlESA%nX{YYM7?Fo*?1s;vun6kru;-a*yWPX-SuSu!_z#W{R$@!~5INbl?9#+= zB8XYezlzQhG-$}Ow$6w{;*^I=$l-024e+(Y2TuM~{)x4I@yZ_#zdB`dKh@LY`?>#; zm^Ax%{mozvD`pY-kb_c&i;>|H0qRuZgBG0_tF(0$gMzct%gSG;2SosEF6?k)3emQ@-CjOGK@4!U~H=_OHVGI zMms}V;U&<(!^1a|*AyM{vDy=|5SQm8a|s)z zgYh)-Wu?x{cgY1^J3NP>r~4U-7qvlBFFC74%~I!z!WL27Rz-~Vq8UcOj2JG~SFM7> zBlopNre$NUuk6>BHQH0{IV$m-9U0#a-6&bf)?F}#4U61B5}0&H6`@8f_$eq+%|S=8 zTfpiCYjgI8)d(ayS2Za@bf=oU>1iq~+A;XFf>a@08K)FeD<)nZi$5s_Jjvr~?D@|` z?$!YF0r%<~oyAh*O2B2rF#)ll84f_Hj#JeyPbx|*{(?H1*;;0R%DEL&iv+53i2x8PESGQ$$w)UF*o^zaHp%4zg+bg5pyQ^Lz zKi)uxz%6qrO{o3L9y?z={fcVScNHeda5MGm5U)tX{@EdGBQ$-TaRK$LHr@5s`BHe| zZ&atU$@DH@bBZbDP}*blM_Sgw4z$R`f9pnJ@5tU;&z`GN=7*qtwqUX|(%Or&tnG8_ zy1H4U%;8#9x!%GZv{LI##h=DL#Dl3LoN07EalMK@@$ev5PRO1E62rRBE@IcB=4#vw zSFhmMU3>vA{ecaE*9A@79SKv08!XW|Y4$q|9qb*cjTlnUDpnh_$47@M3B1N$PATpV zre#8L4b!%_egZd^GssfEXbk(j^Pr}k&=r7oQewFc`z+$rGNXlSUuFj{=9FJ$wG@#U zB4|f{FUm<0$iUGE;6{?h?y+u>U#)JiTDD?tvlJqsR zpM9C$Dr>YLt?R@ou&OHG={D-lb!!hX~7K`cbA|KxlS=h>pv z{d);u^pMB=m5lZVx_?V??WyQxJZrToi(LO?S%S_3+CtU#nC(kUfR)j7wqOIpz?a+16`vK!V-FXlWWfteJK}16dI@r14?r!^z z1Vb@SYGaXhA#UX7EhaYD4(eW{Fgz6vIXmN%;I|nC>wWCgIl&;=QD zHO;w$BZDEik}$rBgDQD95h?v%Z@OC{AnfL-7oHlhwoMoQFvblT-o-~==bA`f9BPP6 z?8MVkwK!pOnRPg~{v_IX1$u`K-K#xQU1z$z49a{rnXS8**75eIFK*N_NIqpDNRaix|kK{n^&b|1iog zoOK-}^a|HLt83E^p0oJEk#F`h#I-Q`Tdm;0fZtI(^rJi0M|?TV!_Oj1!Z(WrjIjO%ir+OH6OkUrY?o6U#-q#&fa`x6hRr#0=fX^j>TUOm5 zj|O^>Em2;KQ@+W=o>m-{?;8N?v_xAfs!EAIVaI8r9=LWs_2tQ8mm@12^Q(L#-&7_* zESJ=UuVkQyJr!&$msI6DJxiy{_JN!}sEM$+^gj8B%wmGGR@ink#P3zORU0XI8uBuZX+dCvkoUMBe;y1SSCNwfg}fZgcp}dPCsF z`n^q7p=Sh)Q zk7t)DqdkM6De3*IyYLWt17`2t*ofM5t$NScfnc3eIpti}d0m<{B-?kK49if-6?M!nNe#Ac3nY ztd`3%7eTvPD(-r(h!v3m$1N{R@`%2Yl{li3693TmYF1xzr%T;)9e8@*{RcsLocqQ5%Wor;70&Rf=BgRNzzrgm=Wj!>^%@AXg7t^bn?VAo1&FJH)DEeal` z4+rfwn#fyAx_OW@g# z`5hQBM5U?XjOrrSW7X9aIaMwE>t?eAG%EBxneETF zbMjhIaC&OJxZ3vjwZHT5tXtLBMuD(v37Jk@4U;}n>cO|kFAZO65$tieeLVNBpumZjUSH6xb-bjTC%B zqL3sZKOi7qR`#jw$5xHSYPg=-O-=TA-%l}(#8QTYi8pUotd`LF?WU)BA6u9~;|E2u zsa%GNuY{S%J$DOhPa`ynZfTs;#b#{TZDaBr_8g>o=1^*HaiQSw{fn_t;bGeGN5o8| zN|&YelrHIIYeIL}EBcSR%^znv5wvRgldXC$9f*`{f6o~jC|?I&j&yIayBs}Exkgu}y>ve$x#X)6jUO-C- zf*z{r`f>f{^p2zZ7TjGMct-qiemVJA>LZ{pLc$49FIXaVQ{P<^cxs1qU+yxdzUsbf zMEU{79D(mNXqvev;J#8dD=I)tzgg6t@1f`FdPqmQL3G{Y;Xt@+Zg&SNI9%Cgs|f|0 z-IaGYb=*|Cg7%;%BfjEyfRTKuqi-Xj^w-j!NcpPp^W9D2fRbyJk@~w4 z&23#e?q;*t$o`Q#_#`oRF60o{XMTPK1$Dba%BmsZyF$TN&9hzZkYC92+!T7`P_ALl zWgjaC@%{UvbBp8(t2c zAAGzcrr6rMqO|*oV!T5jmHN35-;wxwKuDn|EaFRG6Oo+qNSnmh01<7F5xynbe$z2# z`(E@(7(H*VmrRPk2-{;bnpAfl!lzx^_5oy{9dAM2t}JrsPP6?X)_poO3(tg1vlVb_ z8-p%BKf(8EU1}-2DwN52=fm&$onIqSV1NFIw2~u>%!*U>j^?@-p7ZqgxuJ;2_Rq@& z2w$C70+FS@lzqm>;jo6SWUr*DqX|=)P**o2zGvpxPQ0%q14yPnT z?LnPDYS=k=--ddQT7vCrIm&(YlHj69<`vD@+dx3YfGfL@=MO@j-ezL|$xfa}^P2Hq z;;nd&3coTK6Ak(8PBN)v8rCQ?yl$en3QrDYLB_>k5?zA6sR&DdTe>t(#>!wvUw&_j zoRwBLcVo)0m(SP=l25DE0W|Lt2Q}UK7sRuEKcX`-e=~iJhMh0pGNt^K?L@mWur!;! zP<&r&R)XVJdRTnz2I9g44J~2Rfy)O$dg+6tyOW$!(isO{fOuz zR>_m05n{w|pwa!PL#hURM`JqtmdYh~26;D;Vm`aPMqjNT0U$?6b#D}>R-=Bkr(f^d zdNaT4mkdX<*1GiXgu(2QP7|hw+mJ9Btd39(J&62fRp4jq~g4P2tw-<~pdnbDBk-O8NO@(t+CDuv;SGi`@6( z>)(;<-AL~dDgXIYdY~Ibf|uTJtJu#yxom<%Z?9);Q)lrPb^#?(xy9`1`!L}pR@ZMQ z-LEDJu2xAos&&o@+7CmYR#e+|CFe`LU}OLKGS@TloxQX5ANX|>HhqSog>=MZ9&N3=xaBw5YKQ7HcE+1(5{BRCwj>C#=@3Y*!(WbU;NW@cTt^ zIBZ<^@wR*B>tAkkZ*8WCl{ELuhe_4*oi@o5YBpY&9_$(g8WN^jI64ib8gg>mekhAf zaO!D=x^<6O8S)3AKc$>%$i-2aCp2x}|1xTo|Hz+XMw$NM^ebsgoF7$e$$MzVe0u!_ zR^rU*2nFkz$41&~o`DhFKTN+x6Bx;L)>JnA_%&|NG*CU)7*0&JUyJb-vu-~tp$S}O zbei~qvp9AT_$EoF=S$+Di=_teM^-^XE3t%k)C^)gOSEgx5N&LA@5(czl7`PuWSU-# z+Adt(%U4mRS55g3d(_lPiOc(Db*hiX1gsIO4OCZR7%cUN?k_q_sb+5{d00Pz2L}jn z?Nk!ZNQNegLc@M_mLCXU^V2vU3JE&QdRANU5w&-DGVfjIpY)nlZhItCm58X!ix?2q zP}*XwM%p|z8kByqKaorI+LY~C-QJ@WY!ZfCVu1)+kKxK*-KB2UiMuY4#Na>%QOD(6 z^$kl#j6j&$okCDw1dMZNWaQ{-vxdDKGyN+-K0t?-i7mRJtdo8-B955r44vDHfQ*CEIQ_YF%DmRU+-W%bJp$45G1`aYC&UZ5N zU8jE~Q=8KNKGl27tLvz(N!R$y%Ds2fbysiqQ>>9Pxgy=0YtwmYu)gX|R#-Nq&i#Tt zUU{!&D-**2umN_wd|hI#RrhG)`NpX-N!^W@iNyPmZyKrtx-SGtY4jAExi3Ox?Ps}N zFH74u47@0adN%-Ij(JSKim9=7`CDhb9M@0_yyUMsj};4@$$_>o6Xq#jFRsRlTPam zk!7s-DmohN*YmYgT7xS>yNO+TQW9aC+J(D94$avBWBrxIg=9~SoQcD!C1NbGy;e>> zd3L3xWZcO16hfk9F4&&OkNY0|}VB5qb zR?0{@X-QDlybp#SeQ?DlN8MXoG*K3=e*Yh({#^Z`q*ye%)lKw_UsiBQs5;0MzKaTC zNgb(l_F`7pI~(0Aci9*FZ{P1cR*=fQPQGx%IiipAo_K-_ecW9)&5$+NE?O6P_7R02 zrTGO}C?~K9Fmx^!jnU$)o*X~3e@SM}5u-=m8DN9dCbp*8Wu^E@M-KzZZb5)ef6 zbq9Io1dUXMVAE>jW65*05i!)|%*AZ(=58H{7~yPQsp~j#c3ofC1dl;0uHo0iH)AN; zvqKHI-}b^RaBdy4JQ4?=oq$$?&-_6FDctuD6J|Mi`sEYsK^Ot$ff5g!%Y-MPvk|`F z$|DP|V)I;`@hdNTk#&BAVJ^fz6`OXc-5NU$h&*b~Ek0xO+q|scMs98Eg4=gET0BKf zM_zM#805MsjMQPoq+XguIJ;OG9X?}kp-j!F4ib`R|4y1K`JGy7EAva8@Q$r0zKST? zL_n2ymME6duNkakZ~zPi}%w+yKV^eqwC$c;J((Z{GHQ7r=$bF7(2<1{>#24CZE8MwW2y3mN$UlCt2{r;_v!FM>7~%deR&H0IgIpOV6d^}B5$^vH$c)}T1z z*7ol6(U>ds?I$%H)j_M(9CzL8L2w&u*Eu`2_KmL-^uSRC;Or$-bT8 zL-wq@W6!($h`YKC`>JQs}o1si?rtn$T>2-;23eFN}fQLn7B-Z_hbuZ{! zHF3^SktbHelU@G?S>fEbf>GjOY;rT1(#d&0`5f)`CKsCJFb@)Qo&XATtp11wGY#LBu-vp#3d^)vT%Y68ns5=85 zirkdSIefT7`~(^V-=W%^Ekhsjk-JzUWKyT@c04%uPB$74*Av|LTamEF?o059XV=X# zy!A-`V0rk@)ENNirCzh9bv^u$C<$b|Q_{lC&2yCi4xS;JcOg>uy$IQ#+=s^P5WO=E zL_zWLj)%YW{T9;0Tm=%U0bD|*_2(nd`HNJrF653amcErDqjyhqSUuNzFx~b z8>AHi-_~a_keZF3EZ@G&Qs%yA(R?BkJ#kA-H2A`;`$qih5J%tnb~EGFV^zqq`B?c+ zPLMHoYa7}1m|(&azAe7TX+3I^2L3f4PZ*ui6yHOBc$bYzPL9ClFXBU-bdOeV=YG&V zW_q20A6xqBio)K#B>$9sZL(D@NP@?_b5a?to8rM+wJa$h(AMd_Uf1wAf~V|*`?s9$ zRl)*IT0i1~AgkCjNtxyT*0Sc#t|@Nh9G$$}0X%)E{^FrsJnPZt$8imGcs5y zef$q-_wG~u9@~Iut*AJIDdVEVH--DtZ43$q_m)r7ckgKx;vL()UfvLA^C#E%(>%@9yZ zcz+m>Q4WxS*qu``zb)HU>Dn?J9z7Xhm6Sj}_CJ+GE`e3L9t=kUZpN1B5thW}lKXMU zT0@DW+?({=uJg*R2}p|Ter^2<%2y4PF-q0uI^DCA!=QA<0Qn z7lVk1T_JNMbeB5!N(0^s))4)c&%P!->Q3WLFvhcagR&g zFr%GoOmmc9g1bg2LS9!U*5Q*|0Muow4mFhPkih(TtHV-cr8xYj4UsZ>Akp=s6I>?| zPYRV+BE&Pey1aL#@w4q|`Cpt0wI__5v5wgVvoo8{96b}7W8R`=v=3VCImOEpSaWv?4* zbGxF+7ZIK=S(S1745irJ;Cqc6=+b-)_}0C1kAO$?AtqbD&=7ml7P-tOuh3qdLrTwv z1|}qW`gHARtcXfB7BMQ|PjnqKv0s_GySxU^$vguri)LcB2IJ*M?%@xd0ww}-j-OUL zte@PiItSW===u@|+OI`U0zk;cHSoS**S+{P8;5w{&?3NnRJ`~IwJX}yF9mP4{1K1u z2%+_N5f75#$YK09|BtG7;I1@U*0y7GY^S4+jTPH=R%~=^+qRufI!;z>+fF*R*|G8U z9_O5~-|rthV>~r$-m~titDHL(x5@m9x*6Vq_g~FDujf5u+lc&M`8RYHdRynmn5f1xKXIyy1kBUf$B6%#4jDpU^if`wuW)eQ zXNd2j6$!82N@;8O9jT$jP}W*`yT!a!H^PanTEDB{>+iB74Ha?tH!f1FoA{@~;;ZkrUUr ziw{Txx0P3-y``B>h$ecxeVVSVA*W?b#Z)&5zhxy`^~@N-CBDUle^cPLc6@ECjrvBn zB^Y9Jiv@leH|@<@kWznG*-f2%Zh$Zvc;TU$x!lr?@S z$a1RpFtIJ8`1+;a#C>jm;2C=tOBX>^S{%U9aJ0lmS9NPJoblY%q00zf!7gWDBw-fk zyJzVGMq#(;xm|lG=kUaxwZUfw5h~q#RhoTj?0P!CDDA^3r{Ou4=@O)M&|f#(sw*!% ze4Z$q0%u7_B%k8F{A(auADJ>b5-jk6htMY06^fDOdF$7uznKOUk=X6){`!&E_h^MV zx}!5PbDQn8LSjK`!sJ?t99Og|W}2nBi8cAb`tz1uHK6vTF3*9@9VxbG2KeAE&eJ~l4ARd zaxR6Nsrow)0%w|!e@4@`CaC-UK=CW+lW3Xg6zgq9bIbY8JN@s%*Q?*;2;bTBZAGQx zp^>BMPB1Ivo%~miMSy-nE{4#^C`8Nv+z+T<4Fa-<78`Fx2L!;R3}l# z$8;+QLz^ieTn?toV`F4C!@1@#Mj-DTPmaoxjLdEDpz3F#YXU(5SS%P}{ovZ5R)nGk z2&7g~H_IOTULio8%c*v0VrJ>)6Ue!ZwF3-m0>ooIDDM!*HvM4Q5b+qe! zfr{05mVg%@*XwL&Dkwg1r|XHFdBv=;@dRP8M%jIS$KNXJztnxi%k7LQNN!8WS)Ox z?az_wO#vq@p={(NC%_s@i?lM8V$SW0#kz$a%f&$=j54E<2T)$1;Jvh>-qvT_wpRDs zwt&B9slKcKMUkM_i|VU!^NpAnP;qwdiyTrCCMU34wM%e;#rbxe3xNZhc%zs4ghtm| z{?IMos%vG+y8Gx8S5WKXs=WT%ng&5^pW;N^Ze)C_^#wm)#~#(h$jl780#w*77OwD+ zA2A{Vl$Pc9Lk~CACvvDCd}$Jt4Qa~DARu@fo?O1~Ks+EYZ6P5UZgke?HcIUFSpog4 zTt7IgD#bCjq)FfN(~hAYAGs0JAtSh2X|=qy59>_pC<8~q9Ha2xSUG{*L5M6md7j3|q z#hFo)_3byWuo=efDSps(BZ!Q+?_hd}$Z(1g6-JP)(i?Hxw^lrIds#arvsJk%%bLQ; zfoEVv41V;?5jpYrVPdoVxd;HAoYzN^uo;m%p=$2+o2gk*WD1J@NwCbBb4^!!`fk{c zVS$e0eSOLV^Fv1+v|22b$CQi$L6m)(MsDqmq-MXe8QjlF;*Vb`y)0ATfcfn%fh(-xqyZ<ZFD1lhLz@pjnu7Cw}Tq zB6uLlG{okk@s)w3WYtDT%#+@~VI z=H(f}|3sV`20ql7273>?5dYxK4E}=x`&^8gU06}#Oeo$M7rC-%ldNSwL{UInwHxc6 z4Kq&*Q*Vxai?a-Voe(mx73>3Pfx(~gXYaoX~Lon4d(+VMpS_Z1(1SB5f9vV zwd%561C%V`7!^;NuWFc`qv^wwutxF^4LcW%xeWPF(R`tJ6%3Z;KTCqe^y=14i)8({ z0szTm?8kd$&W130@42eqDKgFk3y$1{R6AT2O!^dprS#WU>Nm?VI`J>TB=2Nc6TD-R zS7hN}O5(RrX0mM_2U=<^uQK~MvJYG#H*L%1V9;6x)`acb`-l$z^Y8z2+T##6Uhqb} zOwZFhmehRi=KJ>n3?bgCwoQ(uaFqMjWnO`!3=MnNBGqS9r%)tObpR_=09GCvOx^7L zZJYA4561%|V@JkwBoQ9xJDyjYK&H1v1Ii+9u0#)MYWmhr&Mgb}c0yA!nLsF$y6_Xs z{4|0VwRrts3$FULhAu?;6`rv^c34^Ehhc)+!gkZHF!6qCw4KafGkVR^H zZ=Z=n)V1)Q@OP)!CLT^r2?l9>)qA{j&CB-1m54X;A2ooCK8`!xa&;)FrqfS3gj@`W z;iuzHD=}0$Ac{c(_o%dp3~bB ze(WGp$QX#^4$e6WVmw$y=MxXd_Vv$6*LY-+Z?-}ylqbN(wntcd((_{lb2nn>J96p% ze+QoHKjy+{uO2U?Z*peCEN70^(W}Dl5f=J|ocwZ0C8L2{SProIC5ZS7ODo{xc#Q;X zz_z+)aMGaNWIl5aG@UaHVGA{fb=6-FWQ(@XsX6+!%{V!?7A7+{S)*ScVBKXu5Ne5M zj;lQx84BdR#KJ`|g+!0R$tyswz+*NdKXeB>Su-+eW@MMO0tM*Cu3wL`vgY1Z()nse zpC1z1gtw6;G}T<&rjf8_z0^AAH+luuAON-qfL?$BYXL3$2)`n=Q=E1j)6qWix*`AS16z1n? zbDu7UhmmpF=h^;yp?EiFMx-Wg(!#R1R6T57$;|h?TFXMgGsfHQo2=lT25>briRtWH z{F^jtlaW}w@X3<%h-weesr_yOZ6UxO>}Bm=;yha#D17L&DO!#*!1A*=}s*y-f{R$R$_WhqCiXB zmBX7YS1;1c5J+ep!_Cu&NsI&HnoUUX1nc%MvfkWojGO<(o81gvp^QO@s!69Jjd@@B zRY~8?ch^9Q`X~&k!Bj&rysXv2ix?&yTxRvPVLnMkk=EBjzqV<5Z3Ix1Bisir^(i({ z#3f6G;1$w9k&`;!=>8C;9Anxy-OP8J#`5GtPY+}h`u!_X9i zmIv&3**#j0(b-b{BVy$mLezs?MqZbTHY`n=9XUv5BL~IxDv7J-dwsVflo& z%Zu3@Ie*S3{OEoID-BLT1VKouwW50!6}J1f$aw%O`QNgzby>4GsLt*KtCm+h8FO}W z7=GDE9Tz>s>5ezpq3x9>woQK$hGzibni}LTlRMjLVq#ARh5W}OM-`^ay|5su8?{*uUUUq#?f z{#CzE{h!O?e^QEJGI$LcAgR)N1KeBgDH_G@r#@m^Qnt=E*i)eRbeOg*700+KN{7w* zgfK%$Ljcx>Z%{RMR7IvvpH~rl5oAx}h(at*Dh4~kwX~AUfZ#iAYXo8yHV9p5y?Qm! zF6zTLx^cs!r(QU8eKX_08F76|r;}617W&pY-i|ZLj>}|x{5J+1qhkS5C|Mg~$an9JVrDcr7pS7= zUY)`i9gWxA$x(~C!11F^O`&Ie>8 zqAUs$nEuf)^NcR3(n9f}u48Xpm*YrFD6ja)>HkRt9>@*)E2*}kM=Ia*xDkjLaYW7@ z0Ux$??u#MHmZ6<`_N_jJcHtFHDVt+x4NZD+axd)g$R7{4`=QxB-e~F`jLu*yuaW?Q z@%je+jpD{~h1enS*Ad&?&TF?7G{kXv7GiJd589H;rIWAkn=B;9UBAS!1nYN~F7yKj zY;wF%sgqo7wOxebx6H!AX%)3dch65s5hO1#3EUo~@% zIPJNuC3UL@!|`8T#nMQHB@n48Fb#Uf8762^E$BU|;7S0;RojEOG#1CAE)~-9f|VZi zP~jBcAAg#Ge0ByNtsXZd8|oL=yMN(L4k~2J@_QY3YLW`MvS3JQid`b=Ab|aqybKT`@PW$P3Mgw9Q)K1hLaC660#V1CY=~V?6u9e^CQ;+A=ZA3wCv}e zBs*QhY3xHeHv)58N-UhLppy}mj>t$oUP_dGS|qIkR_5K5B-RP!Z5FgbNFdxYnOw0^ zDp3<}5_r-i2E?kx?LFO}&9sQX$CCB0sLE}&X^Zmmr?3u51PJ}9M~Aa-p5F}_hkdpVUBtcal8@%k$kgxjiR;qqRN)a@`H5i@Ck?q3M1Ez~gE38(NKvYd^O* z&59?s2`gH(W(^-5VMIHc(^9vyyO8q7gH{)#6nF%NZ$+pp-EdO?ZCtBqII5)0Jcbr_1T*EDs>@gWavQC&`jM$8Xp{v!-m* z3YFQX0zBD{`qRgZDvblvOty`ZWT$E#2~S)T)f!5&(n&{giJnHiv@MOZu#Us2`PeLr z&IB=|IJK#|SqW4luPJnZz*@d{hnv%h9@=OHrG%!VM4Zr_8q!ngyG4179U~U(O5d{S zE%_>Q{!}~TNzNl*w@IK`9$SAnG7^IzWf^dwrj-Eu0$-Myyzx)(|&$-Hxnz>)+47><|Ur;W6LGv}Z z1Y^?4PS3S?qkG8$Zaj1rpcVuwi6V0YG}eXpie{o>cg>f0l7|pX4<9fD!KQM}R%6O3 z<*rx6#faD`4n-1*bojx%HqP}?kMn2okbo7!r(t}vo{j2?2VELNhxu%4P$R=%CJd#w z|Hc7uLTEea@#6^O1bv8{wLTD5gikMV#A?z$?F!oR$A*lS?*>$2Ql8Fa3dwu zwd`Lh=$QdAqpiUTe#5^f{`-4DN0Xrtme}(I3Y0nZzwLG>_!j)WrgPM0O}tVQ77KAd zSHvT2vA>|x1U@i=X+bDgV<-+OJlCmvKg=u6=vCI=)DlS5I?fg3PU~peHFQ)7!~Q^E zzumLROq;b|s;<5!QPgx#*m_j&YC$oXXNOh7go~*)NR^ScrOidJ+`f&qcJg}I}y1|*$ zsf1Ew%c5P=-cG*Xeexq zO?is!anF=+53QaZJc9MgqF^PNaKps?QEs&!(A)=#%+f=bIWufbCv$6w#vns;83NaUo8&@|A@MR=8X5_28 z*>nCIy~??*J5I2otBR`}aM2BZU%6DVRx21DYqzD;!q2)X`X&w8@ZU$rLssCO-I^Bh zyZeb7_>Y%tY6;Bi23z)kIUeyo=oiJ0qG;KJJVXl#Qh1&=(pt8y179z%*X)a5V zgNc2D*qP23qKPIfEu@9`cE1q8?c>jEpECQ72*OX%(=gZ37Gy*YT`Eu)M_*al0#fj} zZqym*q;Z3~;Ic#iIe|j0?{hk3&!I;dB8`4xzcmyg!;HAJc0~=jVa}R2 z87e^Dwci(DuNDWO{2`>G&gk|N<%;Lyc5mYrMk3!#*U41hM0AdS^gYP^aex;}=(qo{ z)a*dZQNG_G(0$wB+bC_q2?b(h2A@Ws1Qt@nfo1FjccMKxgtZxH)CCnb(Mep46zAX0 zibi=AT(J5jd|wsnhf8=C)6RR0xcls%iCi2!H~VFSSb1XO#+e(l?)Gj??35+rc_wb_ z0yhOgU{HSL?F!JM0lJB*2P3Vw_L(W~Ngn%{df8Ig+oL;bl?If~jM{XuHnFJF-#M7W z;qkgXl90Y|_(w;%$erxMB7hfY=zh>e2%hJA9ec^^o5aA%(cW@ixcW+(BkICCo5cKi z$K>^N)mHu^?e)9*34}JX+xBQ)M;vUg*Hey-Dps*5G%7Jv%!p`l@iVWxyf(m{Awk3n zO%yVOK9SZ%lU`qOt-{`?qH^4T?}~BkK$Xqp?67#t8ktn3+ER<%VV0m!E%g;{>i383 zyxo!=#h_Svd`AErI2>$>^}iuj>Ml}|LoXwdOqMFC$#I%&(lm7%0%Wm48p4})rT8Y% zhAx)@Sdz6in^!g@13V$SKmFVV*y44(HK%>S!c5)s$;(~qjmeBQP6fF= zpw*gPGJO$`lRc5&AnsA0>EdZj9JFW5YCmuI%l-JPYXkSwkQULeHcrs=6enS^yveVC ztTU=%MEEG%qXd^tffQ=NQ+VFrM~ah9dtE#GN+%LEQ-L_!N?Yxtg7LnUyD)84!!X|H z2`lcJ$1U=BrJ&^Axr)FsKD9Ro$awzGoi^K%@P+J>@$b$GdHhU2gt+WZ`gum^r^A)X zmtLjNi?+qwlI>&$cd z`P+f@6->RMHTq8bJ1`*$jW-V;V}2LJpMnj-HAJ&D#TKDjepKiR zJj^CcDL;m!1N8LA)YgikG~>sZc^FNvc!+}6Fx!eYM4Kp?bhisA93Zp*Idi_b7HJ;Q zzYJ?eW?zky&`_zhJOQ4~stU1B)=35}nq4;=>Q*~i-=oCKK=CoQQ{=_y>p+ zIGP)SX1~Wrf@wA$0`itX50Pk`68N)squl7Le!;e$BR|+iI#fCU#JtI!`&nY?)jZ4h z_PHmAneMo1lY^s*(0jTrg-~M~33TTj`C{aHNq{4SRMT1)iUDFOUNI|VoZ-gq*=si+ z$j))Q>vgmOVF?Oae#EbRq#8(4uA~63Y8dye`SoFI z1EB1Nv;is;pAi!}SJl4EsvuHGd@|mcH zHvkv3j+x=T`7YAd1=4psYfCasoN+LWC{!f;KONs*Q7OK-^n)YYxGBD`EbYfJ$cs*} zxTsG>jQkNAlPxxn?HX}Zmm4?}XnL>;x71c$i8K*V3@fmFY=yLL!U?ykT_bEj`&?67 z(YWj+2;xrG54>_Jf&kz8(5Dk#=@&Em<<-FTgf)q{>Vw_>%6rtA1O@PzzPHFlAtL{{ z^jQ-x7#GrAwAB5e2di_8pSidqk5(;f-LNB%GsHz1;)$T+xJ%kj)WE3~5P=yhs#i&5D<8H7R=){*}Vw>~Z8U~_mp6%w*8MvO4 zNRu($!SdD|V!JQ6!hzPB#dM|hFw{m9W0CBnQ{g&t05uxb;#=VI8EmqqX^Nb~uBlZZ znB;x+LLn0vo8bUX8h%Q>oE4bG%eUwiJoTCW`}SS~av$KeM)=u$tx;hMCSg-Zv&a&F zh==_A&QZ@e8q*W#zvK5_b3Q%c$p3#Kpo+IM&ARQWV6=r&@979w*!44*Mu5E_MtS6W z&wG+t>w+7eYe$`Qn#s>i=B&wHBpnHIrbRBK>r_b#1;WCsn^0Ab7p8Ct^6$BY1zl89UIS9lagf%W&zS)wWYDOyg_!`awI~~g>@T8rBr47 zTR_K7bgoWrx+6{<25J)-$PpkAt!}N#RhU=ItKv#!qhrswG$OWV+p(bdxd&VVoQ$`6 zCr_h!9@iN6#n-V!lq=CyF_@A}QjAFMH!J^!CchpYoC%?4q$ttoc!Ypzxk&|aYEC~B4D+S6=4eEgwiJ;keK-tHw-V)>A> zApLBV3Ls+a#-V2byK9{qKs}EKxZWnka-^>dfmPxH| zs0tAUnup1O0e!W>yZWy9)`O8IR&__J*PN>c1GnFIL&qzC=g8?Vb<)_!to7rXu1XMw z`(HRxdax#W+~sFl$K(<}lx0iPeeoEBMDaO)EPz6>1t)iDY%Qot5bb#aVSN)NU++{@Y z@_%odL0-0v$$7TMGl9I=q9)+Wew~?^|0Io0W_UMOHWc8-)W0{WW7Kt*+~oRcUCNd_ zNswtcq?+mK6gtbGn8sVf*+iJueSpJ{%Kylq$%-dSy($YQA`$VS9WEZCvMxZaSW6@4 zby37p&z(exlE;+OD-)uWS+}ZC!;syokO8Vpc{mI;6900;Vbp+t?QQts@dm@`?G2~DTP z@yyZ^)L<}(*$r3mZBtgc7})a=PIz%=W*J$`>EpMNMsyb=5KInxGP&A$pUQ&+Ell{H zZx702+kqDXUg#YY5$N@D1b%+t68JOU45{a^(}%)*)x(wF?{b+a>CmLc7oouZAV}sh37Hf zz~EZV!%C}<%n#Ou}s%^ZpR}3LNWiWNf-lVu;u7Elxx2hk5W6~=?iy~ad1>0aeFVyrf zLSO0FB7-EmmB^juM|$bmQ|4@oGQR8<>Oui4+RVwWH+G5NJcJR}`IO!bJJ2>H=?S|T zOVbJ4GagC%46|m+m5dYFfJ&RfqUro|)zpEKQW&}gcGYF{ZDUe>`mW@Ip#1 zrZA;(B2A3<&n`S&`Dwgsm;_hudTcqB=Uc5$j2>9r(zmMei|7NEs+m`7%b|Q%Eo?maNq$=BWd6>&M>aUnoMpt*3S8t>mMvPvS#=_Z0#lE z=~)<~yzarLX^Yspy0E==DCG|M&>vd!sXTPq(vBjTm~&_7B3n8M)16tBYIJMHraoKd zF8o({i;l&uKCy5fZZ!UG@v-$Uu9`XzB^aIaI3emxgNXQ@y6ALkbf4H_p#Eph=07FP zb2iBC{B3wW-kBMiw!c)vIA(uS5l^mM=U za8&CXj2QC7QHkvF!r2h`NxC8+w{csk>1Pv9 ziz>Aznw*5ZA3xF4l?D%5Be+;*e60kv#DZ}&!B{f{>1Rb{ra^x!2T9a3lx>oj2RI+% zj5er6%Wcs#;^56a{P=6T!t9Fs1 z`IKYBGPWhP#aZpcNR}!iNXH9j=CPh+K=B!|xyxTY~s;Q-DJaP)l3d9mYE80Ntk-}%OL{m2zNA~E-9Ae|!* zFgrNHv~O2wlTm!)-p&}KF%MZG{+NXH*WZO zwJgX`d9g;x5Mq#)p+HmLb65Rt8|d|aEPxe#dRQu7Te4b~_?op^>@CwHHVpHk+LN5+ zUY4;{f)J0IJLYWK%FvF~+^OG+Sc@mBmRbaHg0lT|9iK)bAO z^V%5YMf&Zu!|xZqr~aebDSR*Lg|}_Dm$uW*$FWP@GX(egr_bzH4Glyk$9*tlyTdS4 z^>^mQPKSh~d3BVK7NI10TAILeGynMV>oEh5tc7mVU8a?6Nb9UCNMLGvtMPK0lC?jn zvBUpiIr&1^|i9=PPvJ29_aDX(- z39xnIIsREM{{U5vS-YEk4Ap~%F?-+E}z4Oqe+!?9Bor8 z&tjxoy^{rd#$^C`;;8q7F0!LO56)55Ys*w=!I7j}uvP2M9)Q`)?z{)6lH8|d?X@ki z!{@i|lsqCBSp7NzB=R(V0(CFCp9n1JT#ap*_pIZWkF;O~x4)-0~7J3R7uBJZSRtEK>>vfG$|D5cY{4VLFP zxQVglg!<~Q3D4jxEq(!`880XauUBekb)*08kYTA6du-|}>!<96QA6tbzOWT)C3xjh zH7q$jh)%J*x@g$JL%rI5XZyw`Z7-oo@2hLBFM0Su1?>R6FEsK%v(DaJ zM0UU5ypmn`hF5CVdSjKBvy$;H)(X_p{WonB#<>lc zN#MQppe9Fu#_6sUv-EU_Q(nxQny>AXr;_PLuh22_sJ}ZdgTTjb0xm^OdB?i#SdTkl zoFiU*Px#t5T!lRzu^ks~9kGuplEm4f#IF+nrd(1>>MI7x(aKxk1I$T4lsnjy7 zK12&%cT0|19ku4VhM6|04_McS&`UH8wT`$%J4D!xf`xOy;HA?i-L*cTIubYD)7taG z-uw|Z3$22jdY0VvD%)}(%VoVJDR)9^yUd+V=q&R}WJ7_iedTW-8VhGLGZ;Q;X1%Y! zh9=dw_=3#Th9km?(sWN8r1WM0wF>7sX>?7;R&w7-6N*HTZup#bN!$Zyf#Hpk0&*vk zMdzFmR=&*{rqJ$S;ACUGLX&JPHdrRh^}J$8-UIsaO^2wuE_EbzE4*(I%}jn+5UePh zs9s$RD2?4-uXaJ>+4Z7!#6=o6+Gj&bCC0qu3e(hb+zY1)=qh^)Y0l$>W!>@RoZ4PE zq;-Kd38ben4SjGA0r74gbyKhc0hRejWZ@twX+y_8EP9p{x7baR)n8>I#Mcnijx&6* z_>AN5N8UeVd6+<69F1*b#S*sd-uHmG+MeBr9!OeFQ5! z90wgJ7cX-32ou^|2b3UFFj);<79G=*lQ9?DvScm`R#~&fz6PO^VpawKIh?_A7c&64 z4V&N+V?i}MWZef<(rB*D^{lbp)kgPNzQ#5YYr+f3;2z+FIEGSoI#QteX`yv&m)1nO ze5M*r@r#Ee+~^5fIR28@yW)E+lJYx}O6$)_WRAF_CCf)o7}eJUw4;pLw#m7{>@ACYw?6Q->!AsG1OEuYYjjyRw#v zRy?q+ObF#4e6jS1$N~GVw^+VF=DZOM1eXS4M9NBfT-j>t_uAhO)u6g;TVTfyc%VEX zX#8K%8*Ogu!;n1`>NElkStj0F`-GrD0Jh1_KliO;*_A-NaowI){PKWwTkFFDTJhEzA|z}+M0 z|cJK`Y#{SeSU#8Yc&tn@GnnQ;ILa@4t$`VD)3nG4t0agvT923f@jQB%`13&ly+YBkdv zn8J6B20G9xa43C*#n;w<5UK^4$2AVNG9o_*la%l(63*sIUzt~Dd@#z8N^zRhm+hO% zF$(in3H_&A4%J2g0U^f5i#ow0;9O3k6g&4$V;?s`B3F){r%ndcupb#+B2M7!x(O5jAt|EK5v z^|DF+Q*?ROhiwg48dd9^Xlu|se@q#0K=$nnYX-ajOo7mp6ne5c=?ScV48+c#gUzX+ zWwIjf6VP3})6|DSw0?@>*Cu&kam~!f{@^}@EN|B3vQC7)p>k^D5UvwLMzG|{HUe0-K zp!AiPA5TqxLuoVhj!f`;*o2;|a~HC~G9;Vo?sn`uqF!_DC|8SLYAe9lzU`+3(~dSI zoCplMMb0`*=05fH77QV-zaZ9j@vQr=$u{OJ_K(!yYQ%V{Rt-52cD%`OXb3VFS8)6S z(O7^*2AmYN>tjEI>eAcMR>0d@jTEFQzQg6*&RUJy6Q(86Z$eD2*>eNO&05{g6;!qV zKFa=SHGh~^c>Sr(8vBY|yg#B^%1sCNsT|35y_I!0bo|*b>Hv(Q5MYZv$mUxk=E;@O+7-3~*r&kT!vlBTL9Fk8Y%|AW=zM2{;*5fs#z<|EzVN7M|MLm5aWH^d{eQ}oL zYJ4uhaqXi;exTTW0rCO9mgc~VDy6`b915&SHX&tuuKfmO4=%v9E9quYg`m0l(1QzeW45%H#Ff5lGU|K?H_7!au>u zw+^ay(LvV_v#0CHZDcp|?{J#rTaz>TH`Tb6S&KJxhc99-^$g25Mmk>l53mti$pchf znFj^%&j>x;6%MU&%SCdJaemGq-WTw->}_PltJd2yFFrS`xz4~s{+Ofs=YsWkC4lxp z4&RPs&#@>zR?=0{LBy5vB+Qh4?;^vb=;orY6_4D-BLaxf=&O%J=wt_uWDiH&{Sf)a zTo*r$2keJrkWQ3A+>okQct+p64bF7O?7m;5m)`|7aSnG$m&6Kxw`pv%c!23x$0aXy zD2|lpUu-$fN)oRP6}2}>=gfc#tpp~X+=&>CvkhClV1~Qo_21?c{{nuA%JAhjXch^iQ0p1$xEQFCXqmjO%A0 zxmcuu|J1XuwLbxZyj_?tT0&Zc2_7hOta%|Ccshjh7bKki`vgBX3s|4hBy@RtBVN4Z zJ@#tTQD&-tn#-v_C(fC_ynMQhwZ)L@$9{0N_iuYF`MzhSoIZ15CJfM>+MlnS%Oora zGGsA&_?t_UqPmiFgv$kCj@x3AWR z&;_ruL`>>$*K{GKOtir)#i{F;0-t}4tgh^u8;jFak$bO+5NbqG_x@oj6I=x-MCVkA zRovg>_{A*Xpi%y6H>EG5Ii*`C8bQk%jH=G2CLS^Asb4qUPLotUmqwq>C=K!ukkp^pKFCREuR@7_Pb^TW)NmK7)T08UnRK`eY&|UEWs)(4Fq2~wA|%mY zogft(OzN}%>J$QD>YFeJg*EZY`%1FyfIOd6YzpBz3y0eAU1Ko^&O1$ctQ(x^_x#ws z?AABi0eDZ%7@9LbV-nTdOnr9IgDYHoXf8e>bqvO;@v2lS(rW~>itFB*Bs|ez{rMyi zJbzu~+=tSg+iLbd;^W$i1QGqquWj>%0LrlW;$K}3G0C#IMU<$iQHu4C7?uYyV|*|! ztG{IGJVC5Lg_4$J2NHR^q8j4jUFY4LZ72(P!ive}z^6N+vYlfEH0N{Ha&HLW11kV*6hJaiT;g2^5SnB)?03@ zMmzXJbVsgy35t4b9)8xAuiBsplM6=X15U?hh6iy89|DCpO%pjrjhKCB*u=U(jKKY7 zNcGqNU)4W;RL74rA#%A5Hm#O@ZP+VWj+X|VIk(Ww+blb;wffvl>avW+mN^yVunv|5 zyaKj?YKqy%{raANUyPg+jg~hT#!Y5&!?ddEg7JLTmB1%zU$;%AISYk_SsW`?kdUEI zJS{YhkQO{r?4BdrW`5cFpb7vlCTZ?uGJwBXvWJzNu8nGoJri#UXN@fU8f88}pXmn& z#Ud*w5ma5E&fV|F0o(_(b!zD`0A)!jT@Da3^5AJw29Wm{fBhTpuB z>e6$RY8CG;c7|e1l zz3v>MDz*BiibdBZ2rzKEX7l#!!GMwcr6<&=aZzJub_*vebqjL(^YKlaLieZJv@9~E zE+r4GbXCVw}D6mA6gOw1zna$MbhK$`JrnhNV`t+%CT0oBaCqeK64AoiLr#!MDQ`$!m_(1HHw zcwYBkPUF*WGI%F@a-=!3?k-8I3buRw>hFIMi(@GIxQ_O~wpqwnr*-?$Wt215*A9w4 zh8#VV?fHiy>!LmYw=5VzjDF;mb7aR%ze%%TCM_XWc0_Xg(Q5m1SSr8n9Zp!s<_8zs zP{09pG97DlOs|>8r+>Z&j(2-n(t6DJ19cQl7y?f(uJ;7hy>;$rlBYlZ{2gE781DT* ztG1O}S-X6=z^!_X>pIqTYCH?iS8ptz^NxCJog<939tBfmy6|rkezc9Zwr`aNz-F@o zHZ&%)ElqJDMHGzgHYBi520a|v)6T_Zh5S&{YkdARq;qzj%KOdooq(fg62E0gGR-`v zC~E(Q=ISd{2F^{-zh2y=^GFEB>DD#P4wgv56QVyV`>$av84jm(^*!@n_0ka7t< zVq~n`k*n#a0K>rCcuyoost>uWP$Qe)Aj?y7GmC3%q&I1F6h^Mh2%7DL%jQEUOWPuh zx3%I{B!G`{K;VAtYc^F0XP{) z-vdr&+g!J=V|27xbT+F0C+gGw(rg+AK@EC~PiL+U7&FoGxbDlaVS?K95@mXdD{;rE zs?sI=(ZWsjoxY~uC2Ysl^>}3W09XtPo43k({~ZaoLs>?}nbpxtnKx~lei4?~VG+ii5tiY2+wn5Nwbn`+&mVL2OroAEK};sZqR zSD(IJ_o45^_Yd;?dcM1f9*>thgJJW&-}EKFkAU}9{U8_o$r@Dcj`T*#NK~rJ`Lh^yU%|P^&(jk zE}KZ!G$|^~z6@_9FhO!}x3YH!zNrPBHeYz(FHYO~z~mP&y)!$9-l$hC`pzocH{p&2 zsnIFxE1TS8Kp&jZMXRkPR=Eoi8U0XYA~Mos4O2B0NBkfrZuThC_J{@@(4 zmwEE+eweRK>2ua%JBBGkRt^{JJ=*5g3M|`ObLG|FLC#QSr&#(L^R@MoFGxX0m!7aI z*3`*$2-olJ+&5%0P{kX1=0D>tM9uYxA*ZS6C-${EMSJYM6S-MFxk>-%{(*T`47$yd$04^YoGI83nW(vKBbwWgnCzn6>SSqE3ZRf zw>et>!5HXKeE?yv9`}+0PM*hITP;2dLLZNZ#6H7m(airLm6@34bvitS`49Jn>^i;l|V+PWWXfwKCa6aQ#sdp*H_ zrmG&&>ntpOf0ZZG^J$(=E@j_8Cz>v`?Q8m)KJH^RPAfbGRO{a7?YW<|-N=7sOnj;F z2@w3CQPlPLi9cN?_#zDqB6=wx#YF7Gwd!GKooPCDK1#LVhM}6*Z&rGR~7+rk-<2mzR(kN>GKhin%AD3R> zUanJtLweCq8lKbwo zWKc7Md2syUj50`t&)HTrsFdKnY}b#S9`S0pVC5^Z}{oi(&%-z+KW`dK^3JW0|q zTK8}Htwxd7NfaU!Z53DVI$gWmk5|18fB}!@ErfxR0f`H9{ZxqGh+{`%okxbFaXQ0= zWi;^{*%ksXk0Mm|-xd7v0-ZlUZLRxk^;&V;ly3qYm*!{&^zBA>pNo(R6nV&yCit&z zoHondLprWH)Eec@5=R9=3(c(&;T&U|0<9St?ts0x@z@Arsg#g9DGJrX-oD`$oI-hD$S zv|yWs@jS_`G-tmLyMH{5vXOt2h`hIjRXj)67&Gzl-A}6Ps|g7aoN_UA-$GXlrqpp4 zTzVoy1PKY2b-nvLe~=oJ>K%1g9}2=XVHwG}B&^1|Cp*l-&<^SO`SDi{(_7*%ZO4zxW{-oNtG$p0c8 zw^Fs~uJdmV<~F_eD|$>gU3>opK5oBWZWm-t+XDAnECpt+1fP1JKm*w4Y%A-{jqoM) zBECl}zWbo9tnIcNtczoTudviG!2=Os*y-hI+ol%~G+FmCa+s$7K7VL-YVdHj!npl) z?eF5*&bfVJ@I=?w>vPxUw*l(N`xu3NG-dLC03Ee;t7VT*&9($61?!XGn_V!BD zO@6H^zE3*Y5BJl}3%#%j)p;M=0x|M#xX+);47}!KQ~&AiOF)B9M1Qw`+sxpw{U7Tt zWCiHm@5*g^AM^kGcQNh%!Ik>&@sAGQ{7xj(w*3b2|F!{#QO5f`KT#QHe7Bxxa=m$S zzwY;i8hqCOu|!AkPTYL7E4DE0B0ih@#OFc^zG+8;Nkm`mhk{QXPdW43Z9V%rKr!M~ zMPK(wU{`2TZ%_8hhCY;(5L5Vc(Du?nj-Y|-p3H<#i9W2mM=Twkc435xGg7HhJ*vWv z`tse#7}{V(1C-04ppos6#Z2#97%i+^}o*?>wS5cQ8|Y_ z-Drq)@}?@NP58W+VG+XC_X9YlvoZE$^yPlNCEvq}=IhB>-+9ogB09&BEq$#d2y_C8Y5(AV0YoS)$CYEWX}tu|4hFS{ZScw_(s4e^=MV6&Izi ziY<4txxCEF$!ch@Jn)gHy8O#tLudXS>5)*QRy=63A$eZRa4quh=vh0=N_jPm3PWp5 zzj0dAZNBcq08Od>ImgQFmYF9;s6pqPrL zyg#@)-TavM+vah-s(E^Skc*>WPPBL3_O4RMQ7t>`)j3vg556@Ff|Hc85(F(S)`I^+ zS?;efy1wrmJ_YZ7q|k3F1-`mv_f>t zuLPH4hwwu$D5mI8@*99kl>7W%#nrh!tj#v9EZZ^D=Z5%8%WqeWDQM8Wq4G<^|A~}4 zemlOc=LH$ZR6xY8;}XSl9I-Z@CYofs&oip~QH^Oh-1Z~frGb!}_1$0Sp2c$ss87$- zzQ;OMc=vv*=&L>*8kEqaVGT+=HXuz4{soHjKVt*+WZ9)4PV;e@r3~?8es%+yme?Qq zE@Qh6C)pIf$D#>6-*CR%eLZ;NR2Wnit@__k`KQdfM*2L3>Kqgz=G6+Jr0Kf!>fTLV zk0Iv0U0^NlFW02F_uVldblKkpfsXy}o>)UT4tvMfMLU}=wx5?DK(PjXMcH@BY^Eq# z-Hsp6gBxyR5u^4N2?;-P-?4V=N6uNq0zV4BJ|+Dr{clJ6sDPoVf-i`l6buCd7nj*s z32~_2uk}qs31L)w&Z3CBRCI}Dv3|B}(mJdqum*0$W4YW3UkQ8sxh!zI0u~}atW;g4 zCQe=w3`wXtABKq^Ks*a>L6-;`5&)Y5(Q{M9is++g!O3j% zEd`_YPF!GkywXdN6&cX`wMbIsZ{@(ymSh6fmQ>)`8Vi{@5KP+91_Y=VmZRHeeu6yv z5vwvP1U5O7$LS|j=1hdqBjZ#E%=O{agQN#=;^CgBWjCNs#Yj_1N&}HAvX;BFna9{& zzMn&Z4ZCT$-A9X(aG91gDlaXKOoTg)4bgbCKviXlEX`J6F-VCx58mFrTUnGi@LXW0>rA02q+`>RNd1A~+`Mq45 zS(j8SikKXoKuInn7-5#49}h9uyR0UqJW1ZIH+%i=C5d$u>C5&v@{NOHwx>(Bv~c<{ zAEe@)3=wDJU-j_-AyQEd4fx9?A`qV&GVp#9NuuZ+)PrxoR8-a`*?PTNV%qUMaCfl0 zakco2+918w$zkon)?73<9J<m!%f;|~nt zjl8ITo^V|yiq+}ED%vf*&T-$Sa|u4xWJ{L$u`6MR7&13#%v(9_#HtI{0n1F*dstwb z`IrzIGLxoVbzU}=5ncI_pHEi_j;pIK8cKMfetVm*0h`!V?rhTXforq?gP+rOZ*T3ZtGxiY_Do)BQ|9 z(4WNSJsMF&lslfpx}q0!WMH-DL{=F+zcykpHW&L|!iNEdFu_9(59<`AgsA?MbZe`8 zdKtPJL93^2;;sw<_F3Nom_Wn8*vW6bC!c{*Zm^`Fm(Z|4JW_ zfe_W(BVqi8U7u`OIGgeI=Z9pm%ANzS$4P#2SLe5|G{f58jQzLS>6y{LlDKn>V?nV5 zc=Cplkaz%h~c;I>;SK}sb7c&z3U=p@&4DPS;MyRCc$vGX$*R_-t{6& zD$JlQBBQ?@(~knzez5x5n`B&D?~pIt%Ps~UTRfnsI`5YC;v7y{p$-Oso7Z8P5L4Ud z4a$qL4QqOgwvgv}Rv(6s&kZ;zPmo{=Zmg^$Hnf$RZ~o$vlv$yPzEm)RS41M8m%dmW zAlsPmcpM9|Ov5dSz>W}6sFV(Nllx_>e~`p%2D^|rAux@QEs!@}j+&Dk zVhES`hEKzvZM4R?emTgWx&hhJ(8bFgv@Xj&yz>c;ESXi1oEtK4vqM%pO}T((xELJ< znZ}J)BXDw!s6{HqQ=gSZ0+U5*dnm=493yQL!V-i=7gX4iy&h@8$pWze9@(BlkjC3c zbdhbUuAb9k zlDXkD&$$x=!%oY0^Tdk(=V-{LWikQhpunZT7q7LD0)!cw6lEOB)S;B%_%{CU>*%If z6&)V)5=vNtUtMC#j!CQ}OwAfq#3mM590G~nywpFNvKSi(CS=5_^mqY5jT69^Z!w(- zwz>*|#yF1Ug*392^!%KNvz_mzcL`SNOuzY`We53*!_7KRr#bc_hv*`Fpf+%s<#qLe z+&E*=ayTc!ci2HK6#-Q9r=92a$!ZR-?UvYF$9rA}*aFvUjh2Iscad{?r>V}~5B5Y_=NJLQ_!?auz;Tn{66?!>QQV z16)AEFm|yc9EZ13+`z}n>n(~p?*|~?m69NvK+*ZgHjd34Bi*vEkC8G_KYaku|1rbM z0kU=b&A^|O${6{5M)0oCZJz#vq7{q}*QL5+l5Au4Vq9%*Ibl@nXWp~r+N$H;f|Qtt z>J2FA43eUeW}(@F=T2mqNVSiXIf_MMhXb|w>en4ZeIH|A)MP8JSHkEp4nvMs@u94d4#QG48=YKV%ny9V>vBT2mnDiboV}BW!u?ChbpXzYXwWj6D`75R zP(`>*@3K@T-RB%hYjYxy+h)zsA4%-4^EZa4aF|aLC;>IpOOjazCVpv1LUWzXE+1IJ z++|K3*Ni8Zo~rf`Fn^X!mh_49yR$pmr$5~`1wZzv0*9*sax>5hyqB7IqO?2yH)Sz9 zD?kLyG7y53mEfC6ak)5LGafnoZy2ul;gla>BBJ5YNE0A1sJ}{63*D83a;;7)NhvxH zFp+1l?YspFL2`vwYfGz>_4z;uvW^JCc-vU|VbM|$k}LdWN-%F?%$){a5H0~&Vqhvg zw`lc4(K<7tFd3^NQ?O=_VNT9Cbawx#CQ2yGwHnbx6a?H72D$ibR4!z~MlLRNi5lij zt9N8~vu-V96FJPPeVZ}!IV*5I4WwiolzpF|J*13=TzK1Tw>U|ml#v;ewBH~#Camn~ z)%u5hX-`Spl#WhDiIKi(LJbIuLd3y&aNnPMPBejfn?}7;RmjTLdR0x3x=5<{6-`C##_XWKKUOmuvfVPEIdErE;fIBeTLLcwDmd{ zy-(oDbg?5&vKWVtxT+;BClt#NF>yD67PH4wd2+UrtLW!L{oMPbxp z&tcmMwc31nLp11+aVIIuX3~3b{Wx;tcN(2BbZqvblE~|G{l^XlT(FxroY0kJIh*8K zcXqt|8_Lsl{fB|@w2i<0JNXT)E5oztOsD3%$G^~CY+YghQ6L{ibxW9TH$AmbYF>KS zWY8<~JijX*{qC(P^<>rZFB-Rfk!*{swbSuJ@-bFvl&b9HNV@qt=>#+h`2}#M@GL9V zdd2d=JHC&r$_UcG%-RaYRzyz(NAnUy86KFxpBZ~V@Kw08VB{i7WE+VDQx~x@J}4p* z7mWTAQ-*ts^P4rpi{nOHic9}l=7AE+?zoik^SCK=N(O&biwAZzmD6J0b0qdexxAmI z*n$wP_2dw8gFnPG!ML z^Ff*jAElpe{&rIF9lMxU6USmP2VOsP4h+1195PHwIMdz}KGc+8_aa@JFVj#&31LV} z{d=Ufu04twk+cW1$C|*Ul9L>oG(j1|_glDfD_N7*@4pW7;>o`uDicDo>FX+lkCrpI zWD=VsM*Ew{2d0OIgu6(eWwndTJ4h3wOo5|+@(k3fBt#GslC%h?k0zb_NF}y}OI2bd zT$V^s#a_^+Z9z#tv`>rr<*^6!?}@L3+|E?D!aS61yZ z=fKd0=aZ~%E4$hC%d$1g0c;MFj?5d38^Qe5J=%?@3{*nhzE*UUV~XY`DH0$%cyJf0 zg$B}R=rYi!0o=R%1WYsN+f<^@0~)n|jJ=U1sx(f#cDFwt+KiLEdMc;ey82!pxqw2x z?<%0)r>_bJfk&9?-)_fQQkyQ-%8bBa?BcuwZKRxy(3p=L`?nu2HmV#ymGJD{Sie zZr_|nEUC^hA2d<8Xu59Roe#Ul{3$uPjdx^2ggyYUrYS-`1q|f2hIDP zZEAn~Il%sOCphvj$Z4(s!-=Xi%ItX+O)bZh_ahyXOlM5yEktndZgrww^9*kU1L0)a zr9l=_;Kor#_ZfSlN7g%MN$!N-O8-bt4!*pqxz2kzhwJG~5I63%E=T^&g;<$&ljCHE5sT>pk(`#N?aiSr zk3>&Y%R%HF&N9v|EbPrTiy70zS>QyirFdrd*hu~1i_BHe&bL<8@E|tSs zjCuz>e>fi{JtieBH2pR>feiWpm!N6aqf>9;dhvL-tfQd0SRrr zojdWDmMR)!+xfMg&A||p9!c2tIGFkGyMGD0WBH40pzK5)e*Ho9(-gvgT-WH6^ zb6m1dka@=NAiZxlUP3odAS7L);h)f>w7qn@9>WJHfTXcCf54@dvLezPD14K8e;Yl( zfSRmRbbDZC&~-ermSin*m0#_t-{BXSs^Sw>8k}zvO{ya-@N9;idr~6MX-2ccK=}r~(q~=Spce>oVYX_>c&UyjDGaQ*z$m((eT&wvZB<0g{jtgKY851?ATy>j5&6$aD zp4+wwmur;UdEp_;+K?t-&G2dO;O2SZkLDX8Rs*fL>UNNi5RE7$?Y(o~{)Mr?fm5+rLE-w3E zS;&wBQgsHdSM2+4sO};bux=F#q1K;}BJZNOp9QRYuMbk#dbLb93A34D25>7~azBQt zSCrWlaNtGn)M4)5o3|WIfww{2!E8d3R1NCRxB>kAVkLV(U|bE!sHi);?)rTL_p9bAG=l_G;$P*`FlEf8emk^Grl!gkwToIIKO!2^+&d*rU-H9)gRws^ zpJ=I-XbB*dd1A*3ux@NZlIVu%a>a_!9Nj?2L6{|f4~@TqJ!h2wdVT>|!q}!aPNZzB z)N6qB1V=RVo>`UCV@QI?ykV>$i~?OZH5ylG_Xb(7DAQBM-}Je;&7sXBONY`)V;o#$ z?O&m})ctUQXDPg3UR|SZ@F-BDYn$rP7)%cg>5sa`Zx+*^DudfZhl-RDRIGW%T|>#a z!-2gnd&ygb$A;O4K|`vUNANDBSKZ$ull)%kPZDQo!0)J|SjWN0)>_%ybNFK}iVd+8 z9dm+_lzl+t2A$z3<_&Ph4ywvf50h@-qjzfmUQ%c=R7Qrp^$)XFmI6tA(5aA`n2EtJ zrm~Ie4ew|rd`u4K7J^8nqJD5z5vYn;m z3ndxaAa89M&zm1H(dO8y2lMVgeT$fG;9H)&-?bCx$kTw?Q-ZU6H`LyJC!HBEZUeJV z=cv+<)`(cTTOAPg&+FdB)+gP5Uv_sz=HU{5BlLN-8jd`S%Va4FMm4-^Q`o&-?7{d# zO4TB10wj$?c=$BmBWiyWx($5AaA67Lv-DzrRbX$ZCZ8Mij2^W-bYwpg*9J2u!kMgD z;AfKj$>4!ND4|^8#}AEl0%PTpyETpEv8?41V6fq;86SkvtUtHLV6@tX@V6aY75!jp z1d8A+teDw5D7n&I+RqK!Bu)n0JJ2D%!wu)z*}pW{y}FNaK`D6 zV?c=?=xE5A_JvApP1(VmO)#2mYJ(kE{8g_G@G4z30U)nU{Jc#e2$dB1z7#Fj|P%0=DyUU13mxkym^HlyblU%{k z9uDxR$m?Q(5@_Qx94t$k^hp_L@p|kJmdR@+Zj4>A;ye~k86`-IxC6_An?VWrDK}q0nLSdv%^wvcVr@cBc4dMgC7Ja{gRF^>j(aTp z^m#&~ee$^bG){49QvEq7D`XNP1DX}_on40{3+t2EfbYWN#&S2z&Bz9BPe_iZ*Uyih zlmtt_x5nKAHeLwWdRcm%g-Ql2J>NNQlTy40#~jl^s__N>q4BJj zT7GJdb^B`y)f#G*zP!@xVTfLTv6mya5ED&f-#Zt6%)QCLrxBc_H7H^9OgDX*2D+ds z=J^n)kRt}T*zgYQsD<7M%*96txJF+YWj@lnxL3+oT>UxU46i9N2njtqi1~7OH1ui-ZzUeBiVSDbR^dTJ8Sc>wKIvi6S9VY808CEL@MZ`JGC)MT{DyBUrAw)F~F?`>12BeE9f!ovB2T1 z7RHQW4gQglKO&# zV-PlE@m&49nygkZtES)ET$p+!AC7`vXF@g4jpd&(!t>CI%u3mfCsGFs*kiycY-4i{WLWVW@`x@20bsiWsSyxCWUqi?_#oQc zvi>k8>F7LtQU2Xj2=smGO5P$;oiy^H5;zB@v`A8VuoDi859r#-VJWTYSxVNBTfznKww0p>mn+u6x^OMfcoPH_t^^dywjOG=q1en;9)1OnOgAerZq zkpY)`p51#r>a!T|=8D4tMC2Gk6C|1I!Sw-(HSNMd(tK1};j>DmA?wn(;;rGPAt0VH z{bm49ko%L)%(a_?n}7u3jXT_%g5%i}zQePNgT9vOZHf?Ax9Po1Stf@hm`?K+SNq5` zr%oXTbKZ0Jw`p!v1QCoIYGti4`uKmfRoLv$f0nqP6$7Am-5B}eZP=$78!aGu^iL6U zX5QFOSpEY0>x)K=3c@JBcKA1~%SmIAU%Kuv8l!mAn-}gStRT|U+`lzjzflw%k*(vS z95Rnl7E8S9X?m=8bJa<_8)-1Iz&B>5QL_7LOYgJeldfXqX=3bCu1*co#;*`fOP{!I zT&o_GLsYV@C7rbqWI`&{cK(8tF6&*${N) zRO+}M$GIhXfC3tZm@g&iyn@s%W@&PRG`=49`4@x&6btb@>N!c0oQe~G#=vSVw(#1& z$#St=H=dK0G!KBK;juf+d0$8jRz9sX*xoLUGmM`39ut|)30TvQvq4bPadn!?Yu7IY z-sf3xl}YCtvH_$OB}oy3)t=Z!kF+_$y~L~LXrwp?NVA`y}|&n6tI!N)=0q>jUwM z$YSL1*sX-4rn0K$p|7-@3gKu+mV?OTuL>va;*$Heu-4vg+0;qxcqDNUC+`-mfnvEJ z3am>DubU8P<6QNDfHIV{(G7j4gs9^x;bAr&ls4};Z8ST#d@mwR@&wm-R^392NgyWN zw=A-nL+HeDsf90GRo}xwQDZL=qw!~aKHFMRYT3Yrk30c6_7TsNR^1V ztMDuZD0SHrN%#^nx0`h9nujSYq=Ri|32o?zb^eh&cma3wbZBEqT6pYx@M_7y&B<#N zCYCuNpo|^}UpLQ5texv`5R&DVw(3c5eXmiW%?26vLW&kz zM0NM;FS$vMpz(hvng3mQO|YIT+5pDBhA%4Hij%(yGM^Qm1_vS)56E#o_6?*PaD;zTG*J)Th9r? z2uB7mzpI40bGLmbucvbaz?=D78}3P*R&CLRz4JfytAz?97xD9jlwafx=u~~ zrszcUQ5E9OAhC8RFBB^WGshxdLG~%2$jeI*?SY_jQ>ZL580Nj1O1%E~o{@f;wt;$; z2A^yWp>UJ>MrHc6EL}l=nG`fA&l9a^DY)O5!rJX$$M5vjzG%HV2DdQV1?$}C4$Q`! z_UQpP7Er9K9a-nX^G8;cb)m-mWypHGK2iAax4QFb94DV;m zXI2t9Gr1fRTKk9oUpZu@dBiwdQPyf8J%M?yW=zv+!{)F{Fjob87$P}Hw>pJ5;N~Lt zg#uMaD9z2s{1RKh93VS7j!4*(=i~2LPr%%natCbDCywj&*}ysS#VI5&@7;Q+(l)_^ z*-d3xQL$xnKN<(v%+XKiC6RvrGwf`F5*3?yQItIw8yeZ1U$zI40V)A365=qvyI_wp z#w7bjx1Q#EbL?YESlk_-L$0H@IbZ{TTD_{_KW zI{flURK`{%qz%+SCM|4+?=hFq*jYn@nr$TGgYu8)H;5YQSJ$8|G41c!R7Y4v?H*^D zqq!;7!_ZP?CgIL)Spa+FpSj34fZ^?g79|9Q#k(hIu-D!D_0OP}7Tu6#5G`lxfdarKQ5Lazidn@iVr=$+c zuqVp2J$li`@I!uCQ5eLrH95|MUtjd{%I|xxZwt&U3tL094eu|zSk@xAAFEDZv62V& zp9lUElLz3@p>>Jweb@fL*-T`df+Li}6ZXAD0NlgSA41TY;(HPQP0@x6h0u1BxZhDn zT{5uFBf`dihv?;G`@KN5>M;b%@3SemuG!^@A%){yG2S`Pu_F5&)91AraY2V?qK5a6 zCv!;^4i}d#W&h;XNKvV=Z7|s0PUR&>CAO;xW|S?XQe_ghm7?W>mz*Xz<}4ZSd~rJ^ zf2uXwv4}4_Q~=f5-e!jt4O;?VgGNsd@4U|KI5Id@BCDN-A`9CN4yE##3OU_+~M=u56|^eIXWT94i@i#q}QMP z6?{uS3gPFlUgU(^C+x?W+cRmYkI7f9GQd>6t%r&-pckX{+hPe{o`!oGVo!+R^UBXM z$eT47Hw!<16gi)xaOR;^*F1-1TOR2Q?^f(hvl`-s1A-i2s7Tlbr~xZRR;l&_ngmKBEIY>UC%SFUrt^0&IZ!AVGv!-(dg(yUptJ3nk zZsARG5uc!Cea*_rcABR#L2E19m=?sooI!v>~bZOU(FG5Llz((>q$@|u9WNX5ZfbA~D z$-9r={26rGlZe(<{QZ}$)WvJAMGgX%AF0S!oS&82I_>ody&Ez%ozuL|g7dis6`!WL}is zkE7acgfR88A55j?fb;!fl9+4hG{n~DDE~as8i47*Be00BCEo0jMCT-s5SRXvtf605UH|bLk%dFd${9R=F-JsW#Zy>ez%`}mN%>!X)r~!d_ z0GDIysGJ&EdJXEFDaZC&vn35>&0c}K%&hExhuT6gRbm`-k>vqwo2;0 zDY<}5U=qBNAooj8aVFhtM=;&_Uwh3X@=J#PtI>RLkZ5b{;{uIRSi;)mT~?xHqq>hW z^C@eMF2azszpO_cy8LZMP>hqtSu);?BsL>6_O}stn}}C#7~KNsv}_rK<-tU|z-|gLg?V0g1r6ZD?%3xJfu2 zYdUh#EQT(}BF|sE$UEt`AnK8$WpAvgH)W1R=3`EP zDX~dX6l{~Zcc^E#hOE&Z%l6K+=uLf&HhV&PBd)>V$a_DUfgW4 z_cNOoMqfz(6o+9E2xW*o0nQE<=bCR>K*hm^;mo~p|FmAQZPn3C1ji;Oq(~!*@9c(y zidxRecvmHrTH>hXp_V(k&bs=s6}y{W_*?Gq+k?xDD(-p{RsZtpBj?GLs;qp6y}Ozl zait7=R}}H4ADYu~F=nr;&LE6QPYT5HPh%)N(5hHwhvOH#cC~`1Kn}*i7is36$~nni*=k znyFbg*@|m zRd5AYB9-e=l$^vuzfsN-@dzvgM(COzBu~GE{v7@q5(Y0 z$9fFa*{=)zK*E({lf4`8mkY^HT_VpL!4}dq#PkKpjRxeMe8LPv!#6nswv#ygm@v{X zSt&g5-!@|1RF2T`rlv8c^H6{#k-d}*8!-!E`nGWxR>`{p;fv;mZ!H~-R|);?AWG|- zLNpKw@~#)jG`c_0B6ylGq}FW0AJdi7+iDD=ej)^Oq6oC+&t_c(AY<>XQgASzO1r%( z3G_xnnTTjTx~WyV3Ez5mRa($R45Vozb88Nc9n&f#6~Uy2ufVq}^PW1-Yc^!wg&3G0 z3(G;pcVg6RF$!zCVgNBZiW?WLF+~qB4tVVjbvB#tu_d;Ou3)8=qFHT32L;t|Pkkif z3&l@6G2+)=XZU9jESck?J2P%jnoh-;d}OulLVpG!>+Z=sumsc*gK_^!qcpI~2*|(* zBg0<4O`pn>W{1xajPV=`DiR3X8yT2jwkZJnE>i4D_1r&o~q@qYvS7=3*{^y;|q zit=5{U?a(q|5o&4Stl-{xj&v{X@S6o7;H0^^11+SKL~|5Cn+6$wUMoi*$r#sjxfz5 zoQiND-C!u5JEAth$23T;BurQzL%(?Rx66f(SMKSAbIodeEgt9C-h1a-R>|>=P*ze& z^rg7pJ#I2#`fNwd+}*Iy+x!o1It~)oJTMJ(;^180a?&Kt?aih_8nLX%`5`lNp6b3M z-rWxeBlpXkVO589GdPR6dXhGpFIu=A5sr@szFd2gASHPVVq zrQX;quDUGepqsI3xtRkKEujN3ee5n>O(wr{@?+puM9h2=@zPYfIuc-4Kg4yq>z9;Y zedk=&bSo}`y6_*T=S_7&>+C0+ta!+-%tjyEID$=YFw+tD7Q~+B$}<41Z(8LPA}7+8hw}z7~GOXYvaX1Q+j|k+(odBH4bi8se^_) zZppW<0Pkl2(aU_w7sd9=EB5SQwb5dSV(!Cc+SvIvsA`qH7FFQ~ftYrPj|EhK36LkObo!|6?aW#V;Tam3~J2W9Gm)F4|vV~wq_5OXuO zaO&^`CDvU}iv`L_55tD9Fz3*(kxcADEUE<4{+Aytlc+E4C;c|gqVjk>S^0!b>G1qU z_pOiv;|VfqzGFoPMBMwIgmbAbb~QG% zAULW$?bcJIzl31S*DNqKZJJmPE)j5Skb*6y<1ckA0&^c0$jw$&TcmkRnxYO}bhVI4 z-Ry;rU>W9P87RC7 zBL}bb47{5|aV(-9=z%egn3K?Ge3B1?*XhZ9kfmRw?Ct7g#8{A{VwV_l{4(yHmiuGl z(oOo2HS^Q*Ekw-0|7@yAwt^9p@UQkfJ}1x+ZR@7t8W0=6OYR=Uoj-eFew$IxaWpco zJ_HlhB^tp-a-`%7oQTqhp(ZXuMksW)&Cx3s+uTG8vfh;Hhh!ECguomP@`UZ;OK0%OpgdI(Z74}nbYTBO{a4f;xSye_Ek4`4kCBWe^!wzri z>rmlN)i!=)-H|#!G9yQhCgLh-tfubCLTJ3$OLP(Xes#q-5*DIhSbt!Rhx+98?%*eNDp? zol3wjrm@`11?6Eg3m%`?s=4$8p_W`R*Sc!cjzX zUq1!?0|t}8Hq1#1E{Qdk1KNJ-XN;m%O6OR7_TJvClcC%_w85{?|0nnVpN`^B9RLx@ z#ons%Ffn74*^Rh3f2imyBsU}FICkKu2jXzfvV?winpjRp31KBIc|!D#hXgF?MKC2f z^)!mcf=*XcWgk#cOH(qzvN0^rm^~TaV|{5}!n`pvJydrn^MsP}Af>b}2{h#E;1eM! z0nSEo)T|O&05dS>O=EP>!5PglvU=zZVQ^YGw{|grd9xLoJTn5v(&vmUltkXXxf4xz zv>TLOiv&vm+48#?hkOC2(e&8EXB$VN)VrULsf=KS&Y;g)JT zKO0XcxT(h*p=e;%^aBmkPW8ciWvVuCv*&?5V_?jY>*nmi&Za%oUR!LJwKR~4kk%;2 z2{l`_78({a)(5g^(2CdHPK6#WjN zw2o^he`V+KxMAVN;JPg5 zpcmmhf^>p8!eOf0JtGHb>wwpE2ssw!shE8ac@UWZIJA0Xl}ouI15)Wxqo>7!p^lht zQ*uK=I?`&uY+i|c_BXATlYmU7$tdcLF zdvW)zZ+wO$%m*g6f&8}!(pqUUwkbMym?wT#O30^Kf!J;JKmz2s|8H??2I$cXwyx)q z`0Q95JEQY|Hsv>OgdZ+X+rvW6YFVH*Q}rJ#km5TWto9|A=5T)_#U9|DqjBPHFevA3 z2m>>@9JD6-mK_z7uOKoIoJJ|)Oglos!KL&7XL$3v=xzc@hq7IV!8OKRZHj1pwj6a` zbLLJj2dMoiFh>%2LAs{Ig0R=2?8%tH3Ic61{9U;^0%~CFAoN;urgfJ!YuNDCVg=NP zlS3}oH9vipx*NP%HjrK-yNkqs<1>bpzZc#*dvrEvkg6pTC&4@oS+wJJeZrK7ho6^< zt;yk&C38yAXKh_4dGuR+zgk=R1WMBpvo%YY>q(WuP+5C!r@9&CO+;;OB~tbx)e_!v zsCF7fMD_8D%A*`C zHAAi*He+f<%zHhfHOA|%ErJ$4UupjRlw=!1e$2M8p#1Ly&%=J*2_p$fQ9NfhR0>6? ziTa+El{JWn)UDJni^iL66LD}H+uSO*7l?vgO`JF9HZ~Ldouwy_KcL2iHq?=xk@GV+ zIH0xelEttp8?f?go^C@(xiZcQO6)aPWtmfzGxckd^02^WC_a7(KC_QcMdy4k)XKQN$YOx<#7KMrc}I zOW(Gj;(s97$=!NtN3*1cE-yrD`H*6$qm{reZ-HTY0k>=AL}Rd#u-7znAiKd9niRPB z4T`#Uf=xB#2NiZvGfi!(03bT=hi0v(n{>Kq!muVubw?{PSCtc|)$0^{{72zeUC`XRUjU-zmSV5B{HktDwVf?1z?0%tgTv9hZiV!hOfSA_sLJqDE4b4(!R2C zcqHqE?L+D^_S7Pji={~j=I+1~n)YPoZ$LYoQEoI%B@Q%+ zWfr5qZBVhFxpo1f2B@8<0>Y*pQQYpB$N13k$GhFRzMrgG{!XZFWO*qFZkSYd$O{`C z1(~rHgH?ND+=L#PUd6oR`%Ou#N*9BOP}QTg{US_8TsPW^i!8;zNnyM=l$Py%Pi0<~ zTebsi8!~jR^K~6g?+#q;-{ft2Vajk0i;R(g;CXqt`xZPBUk&iO;El%~D#t95F>A1D zfGUhIlQ+G#v9Vs?^oi|wj2Vwgdc98ZDPh?9fX=L}s^69Ty|+DYq#d7`GeANv1195V zGq;j?^0J&e_Kx=udqC`^=gU<~-ZC~5RkmL*|2_{>s9-ugSQp`DhgR*&=IEhhn;+`J z{!az|PY=&i{I9BNz7Kx6kg`iH!slXq+Q*w-Jx~ySFKL_4u@&y$HjG#yH$8)1iD~X9 zqmGlvG-KPhTjh&N017?aHR->Jwb*Fdw!w29qf1vBBe;`WcrgkR#sLShkl+j_BF4=^ zV0e<^*L+)TG?|BN^1cvGnaDjBN-$^zuM9hf(XeMmhC33G8RTQEF#Th)SMH5+A({kJ zz{9G2Y?oi&q$n+FD6T8Fog^I8!HDqdq633FrNrN3aRL=;ss|!Qor--n;h`7ri?ZYM zR&!Om`^WJdF`*qP3@HbtJ86{9sY=gpFGW zrQ!FB{{;1>#fydH#*C_s*=sTQD{xu&`ObLdQ7=On+zIXkpKPr|#mSwY%s6&Lipj+? z%ZOX8!f+z+CH*QJooD(l7K4^Lsvt`5a)>Z*suJmxd)$gj>rvWCa-qDgMD$V&{gVqf ze|UpJOq!g>f1hRQB7~*s)jn5iOQCIp?jK!;eSO&wPmAhR@Pox!vguq7GnSyU3wPe` zG|^`}V)-rQ7i{Q$1rbvu|H!LZ!CP!vo^wK)h~7YnB1vf$hom9**zN9_-g*wOb+d7i zsOdbQKZ#PO`{wb0sLxdEd)r>L7B)V5qH7YpK?BIwte$}j)QRngi0{1Vto)F3^)p>n z|9kjAz^c3%H-F02tK~Cp<6h2?%xE}FZ`WV< z#rVlBfHO#gf@88D zyE211`RyjdZqgWN~LTu1QGw6dx+E88ngx% za>vFj_>iH0AtTX{xP>(x%X@chK_j-rrlm8>?dKm}7?Z~%f^r38tU`1DGDq8z-Q|Uh zZZMIK`;L)Hdk$v3Mv5=kJIv3Z%{`%TEr&Zfv3kN>Wax4(0K4&f{I`RkIjXeLh15|p zl;D<)!e-F=UpHf{X2p`xaw3x$b?0anRG^|7$<>fiQA~_3rarN*;<0|f{rFP9te);2 zFgz^4j8`Bc-dshEU!={Xi5m{|cW{{y2vsXTc~V;Zd#lA$TKZy{lk(8Ech1b^UtBT! z`=7Jwk>ScKErxYmM&@VJHll=9wM;`{>7owWjqnp|QU`bdjXYbVmp zVDM(^2uJJngzY10e2|ay9dBh}$J{U0jn4q+T}&G3N_-Nz4|^8to>#B_Fy0)ae*Ps~ z`V0MHoB}Rc)xPEL{L3Bk<&0p1s*j(`#7A&N%oUqXb(_#c5(22*{nD75RQu%u||w z>G8z$oQnDx@;35&zTu+CSqas}SB!t*PY8y!QlDTEz}%~-xe9)kDiYp|)i7`&vx^lx zH||*eo2y}6MTw%6VqLZ>P9)o6Vu>)mkWJ}zS?860c((Xq$(rNu`(H&=@o^+^CPEe5 z$30UnkHMAz^HehpKoAYl6vYHwTs2bv?t643>%4$%xgCwT5=!~(FGDXDJS%gonZ07| za)FUz2dLNTAhQhFYX(%SrX^Krkz@CKj@Bb(=p%g63B7%uKR5lf@&totZ@7$GAI#&E zJU)PzZX^yj8>gKw1eWajFcVDwnXrdhBk)Z4+!Sl@*qhy5&qT6yv?1y&>wn}uRYB8M zVXZ3Lyk{@WT>T2{rN=zg-ry;g-2cjPS_6H-v2Wq{c3c%zMTz40{S#Ui8GAu_kgM2O z3NAa#@YttGz$o%Dnh|0F{?s<&vn1+R#%p{uG4N)q*d$)2k2wM1JRu6Yf z<`SNlwl)y6Ce!YF5CCSJ1Nffv-LJn{JQ!}3dsG58k>}*6@m?zzJH4RHtINublWgC? z!M+aad{J#yYCXIx;~@TtQq|;!gC~i*BRgvqSLm(hA^Dr^w*}3^`UUOoi$EDd(x}s- z_PP?cc}E#j_eD`G7|h-6sce@ACy$ZzpckJbGfQ>#YQ|y6mdm6A+NHEAmLQ0kz_T4u zd(XeBJW$;VTILzByoG8pM~y0)^Op0!XYVd@Rm24NJ_z4S#m88sj-~f6}4D8shK$auZwe;F08|$Y=egu!AzJD3<*D_BK6F8jb->2b^ ze#@}k80}7jqCjbqh|ki*}t7JVQ*#s6rU-Ix-H!_3SW6$d>Tm^ z3<{@kImA-}h)HGkSWBHEShC#*d3g4t(t#TOLleiR?VtVop^$tB0<_l?^hPn!CHWfQ z&1Z3KM3nj*#k;la+wX%{n%4moAYpLLx;u#-xkG3H_nZ(`&KP7K_`u2TdYTdXN5jfg>l*8*oHfF%5t`i!RMwL?IXBGVU()rG?}m*ZWbVPsp`zZ`$uyLSCU|I z!u5=`to}WyRb^|~b)kvcsD53wW+$Kh2ho+Bb=xf=Yi$w&kCPKgN$8`o_7g+aWzeqN z@#TQs*0-C&8V9nlQd6#Oh&!~r-NV)<=qQptg?~*JE*oJf-%MxmtVJVPO?aY$M%(H( zJcM^}9dnNpz-=P*PxPtCP2PyPl15xlVRWU}8`0p@#UgLVCNt!Eue)#m7%g|2<1D zWY8|Xar@Do^7t_{TT25K1k$8CAqHDtxN8&LBiXS1hU5A z0V%>Y;+E9ey|!;YCETGR4V`XWx8G#pbW6h2r)0G2Da6K(G#fl~`}_s7*UovU!WqFk zGzj#p-Ps?fF@q4FtnRH;-W$$VN?V29Wj(f<~oUH zf7?YuC6)he;&v3w8~ooNtL{&1b9}dM;x;7`N6jy>EUjEnI)ix@S5tyiHrF*z(cgu2 zLEzLXsfaCRX~A3!$z$b?Ow17QxEIPE0S(_`VZtX?)Aln0vgJTi@e~qLxnyFJc*ff2 zkeK1Jd}+ip^2lsSQW@qv19JIEu%)e2AnrI;wN`j)E?CsorRbV{Qb~VQtgC7ZzNWJ# zQdAUkU$9j<@Y*g|G@^OqQk)nTcgN2AJFZrP*LtA~iYU|C-d3lhdsSWt#C*O2gde&9 zV3GypkZFg7WFni z3IjOxWr^fpw!TNE=g9JqwaSaXFc$;`|q4>j2A?< zd3rJltVBCtPDF3NUCA{Fd5^vn3x87aK9BLU{&<1p8~41N2-`RLymGtwfCeLWkuzBxt927;K9Ew7-u1N+NS3HqaW5jET$tf zE^K5ZS;lFbJ(t{Ixl_-qglaF0+Z$8<>yPhiGJD2DI*?%ks9_(V52N%@%t?5pta8W2 z$8K7k%l2{4sjYu62Xpsyz{0|DNz{v;pD$*3+Kozp@_6@xo}nNd-0{-qitD)er5xGt zprCsj4d~;DKPWV<1p+_$bBtKOK{)0+6Q&);rSQ_M%kKhbz zENrmJ_{SC4K|0nbN1^~tYypJ;AC;7f0RfT_p~lWuEgAQ9F?r5NLjM?2nx*07@U` zW&tf~C>MW(O7(fi^bNkn5SyLwzCSHMypl>c;+PI!4Jhm+ z-m!uN_!iY;Lw}0pVoX&0#$${9zNQDSM;Eo}NvekZ|0Gra)tEpE_0Ufar?_wN>84Cq zikV@lLbjO7(Gua|2|7@gKhEP$!U_C4uE57Ct(HaSP0n?Ryr#k#F~>RuUrwOtRfN~o`4O#4 z6ql1A7e(P~5xE$L%~Y(?DX!L{)_j4LL*DIFxnwE2N{`pJVJvaYa80}xUOEWwSyns; zh_L_@)C$&79Y)Y#Tt^1Wf>5>I2+DoahKTw%!70_NUPT!9u@8`CyiDngjT#E5b_fka z?VTK*01^c6|=0|*}%ex_-h2NThEVCeMVR}`@~wm`$l&o7Wx)r?T3c_ z(f$2euS%CkW@tW(BeZ~o!a>}i#Z<(R*a<|*#M>qN)VCuBjS=%vM1u$X=Of`a$_3ZS zk@c2MI%W?Oag_7T$W-X1EEHxcnAGZ|9Plg2O>T|BuYft)HMtId1f|`G&!&iEjQp9LoNUhhai(kFz=G5up-(*VpFuZrA7sQDZ zod*$r>gB-D9gBP3j3Il?tU3P{_15pFH=J#gLU(!-Wc*_e%|s=f32#Y0cNU28ZCmL} zoOa&09zX4fXCQ!IgD{X#0Uc|(KG91$9qM3(F9OB`tNaZQl?UkmnISPeB#SOK3<;SmD%f;B6}AoIkrnNaTd{C% z+Cht6&w;M$u<;#limVt@2%)gr1GTVvp>PD2jbNs5%qTK3qI3tCqO&KSn$@L<#Jx zE)!dz8ip^7xrj_28_&QaW%0{_~48&%qk;w+(3({?IyFzo7 zqy%9Jz{0kho_1-Kn|ybM%yh0M1ckG7iK>NM=sc+I-^|iAm{ZHa9OB8g{#_9ZI8FNt zOdG^2MH#j%P2Cny7@d<DL!zG%p> z0*=BZb+{rMIlk0Z@Gw*v94hOw(^yr8aq=g!_lKyPP_(X_jLm>ftXPXKk*jn`30Q+%xNh zSRM-EO6LalMMe+CX`IkOlJMofU1b&re3fS-xOq4+&S~tlWHv#1PYeg;k)|@=@8q8O zo0FFJn5^fh!(n8N&&UfJ{an1%fgz^n{?BLf4o%z{F13Cna9`zUmB~rIOJzLGHY9nvO6LbpE|MF*iX zz2?2PymR%EZXCp^{ul~!wkZg%A8{JJaD2r~5Oza&*4(c@0XezIt?hn~fM=JZMIHmT zlU;i}CvlG5d+-V8e^9r;PWW`zlIplA?6MnD;+@d<*7s*v(6~PK;ZjLaccH2*c(rYV z83(sVG%#TCXpiax0}ND)Su-4#SQ)+7SA>#%PRf@Y3EP7{w{*hx4o;~|@2`E900cxg ze}&Hc1tZpL%mKV5?HX6eS1&GK;zZl4kO?|lyZhCC3ooKvo<4W-O%z2Guh5mUh$NU8 z9;c$#(8;|0ttjAqbsYEmh?nVN3{eB>Y?1ZsuG7BM2TJaoHnVw-o05Y!s~9r=`vYfm zIB4345B0}VL5AZ%Z~ z4!6Iefi)QaABCY#w>1dDBqF{WXs}Vue~+E?r02aQrsg@$U0I$3$7#TiIPW|A4Q8*u zC0e1UU3HGcqx;|M@yViQe-wO*n{Q^%Kl#o8Ycxe*z%Low;%V)+#?V!7rgfcQ=iN5IN@IuDqzA_7dun>D3lnAzH_ z)q#^QE-mNgw(gSP(>*Uy`O>7SrEGjw1hFB%rNicp%*a||$h4qzoV36AqF)U<*~{=mq1m$Nd?LyNcLtv0rlFws z_9kj^y)Ec^>ZDo+DQg$Ix9Kf2~98jw3@$ZiI&IDaUb6u2Ru3qSNkrFmJfrLo1L>TF=}8qnFv0G!x(N zrQoUt0tboC)NHsqxNLEG4Zs$66|Y>=0PTjR)EbR!Ps^T}xte!HC7rne3*55nGH^0@ z&1cu>dD?c>^i~gcKZZbZ|4$~B>E%bkn3HLSJZGmi-Q~W2VY`(_EMbck-WW-fB|C{##(=fP8_(0!GD5>>P8K(-KTuMF$92eNy9 z;LQC8V;a^3*G4a(Pj=>cB=t3g((nE(6PhyZQ@7%xZ&NLS|<#0OC^ib}@zt8UX`Fa!o zdC9$3so{&ZIq9otu-9t4LtmL31|z|70oE;O3FI3OHcAt zYe)xNk^4lh#^8c`l3D1DSm+MD)X7c^2LMknTPc=)g*7W_0(xrMG-x*#?;;=OV)%I2 zkyiE57y{vq(4EE%a#TYvT%Kx9W_OO8PZMFS!}BPX;!02Qt#Fvfruwwqv3c^rQ44N` zYn#;RwK03i9*&~IAu(Dau#k?Gc~3={u1tF9m#aiOlEbcLhjeb73U{Zd9Ln{bKXEXo z0=N9^Ced2u@5rx4LWfvqhjv%W%rbQX$AX`2`7(;sfuV6oKV44c|1)cY2o~cSCrjht zcDcW@@235o&gY1t%^EMb(r|iLu zt#f`0LcP} z-wpYvl<$3~A5EvYwF@6-lSceng!kvh`pq@!J7bBV8>F8u@N$g`ll-;r!h=w7flWvd z*pTHnJ-PMohqUMRlfKKbv*}>pqlw&Eu&&!U4#1{@j@fhn^oujHTaMtI%YEGw9{Jdo z%EL(xCCvJ3{nYokN%{E+>q}C&{yG=hz1FCj!el_XO1x%Mc!-;=+wCj3;D|ajYVc~{ zf^((oDtpnkzY1a=1u%OG?lC8K@)O4?_&zZMOrO5bIitI`3d-e<8bF25Ga7d_>%?G9^71B{Zhc!0Zf|H4QBg%(0k(nGotU#~o7Ahsbw_k!{Zp=;0z%HCu zxLM{J=t=y+WR{?7Ji!I>!g66of+;~+1gLBicnB}>%%;~}|F}c18=#p7QW)angJ#`5 zf-gr?+owjp$1}Imz+GTH<8w!53h`LOIK!Fuo((pMs;sCwZe3GR!}#$>MNuFquWHlr z@pJq8*K$Y_Z<|g_S%TxI3ctSnK>1b}3$=h0^g8Ve7@ZSQSQT_;`wkwDJ2aGSH;^u+ ztMAdOIF@I~@gE%K*JZX1xDbQjQ&1w2u8=BT75ho7Q4r%nRd$*Gl4YKXl)(^**erDu zB?pnexA$O2428~U0X0q({R~um_Tg=XqwcQ%Fi854`+RRU9d3kT$VD~)@gE25fEBF? z8B#We=@@qXvl^;oEj6*C{@xIB)yWXK73Qix_tkSHt?ZsPvA;@m^oWzV93D>qfdx41 z+v(A{>IB&OOjeX&l(%fNU7mAw?o}_ABa;6JDdC0BNs;zpc*kFxw8C)#i$REmEuhh% zb!OCy7O}BQ(Ni5rMoP)# z-FFxs8z2BQqWX{%T@%_rBKIQ$C9|#Twy~Wz z1l4+f{*^b7$ax7$!v>+4bGMIDG5%O8Sny&)-@Ul z>R3WaBQ-g&Cewve?uW9ufn>?EqT*zsrHyX*H@y7fGXnf+I2!36oIc96&80?|q~yC% zDg?X!wsXU13x({;(u2vi4D?E6NbDWUBNTG4M5+gLZ+;WS3>OB2(*0O)UU%jt#2=e8Z`c~iGh?e8!<2>A-;w2u{KpGd zB;HegsqGdAVeIj2y#Yt<_l2H4WX@5wY&_}VX?N-CUuPIV2$?~-JSL)B%z&D!-_|st zXKNLBUyr|(&E0wnc1ut`b@GH?Nh}NoouV7}nV%{`4?Tfvj;rHs>YkqXDC}I3^q?N0 z`@Pxyx!H-h%GwY7tO`EDQ>Hn9yyrp=>80l-$!OTeODw>B)vSu2Bo!|O8K4=6e!tl9 ztk(cMhaoCwxX0ed@jce4-)N`c)_dg4-q6qN8L&#D`ZBN_>69_u4^`Q_Uo!IUqdf%i zhV_*K#W({1Gdbvk!Vm#3wQx4=P^_^4HduAcGUjTZadPA!K8s(b969j65E?1cEgfn= zu4#ct@}`im2lAnn@{5CNx7DP<_%O$4&GD|gAf$n&>ITB7-7}|olnz?yQGpGR6dZ3? z`ELk6=F}=7*!Jel7=@hmK>K);!PgzS{p7I5F&t^C`fvp^Jo^i|Jm%ayC@PPC_9+_y zSjWAoQ8@u6cz`0k6!vV|AW{_?E%#Q)T_Fmabd6*QQ{sXPU< zLdK)Vn#>_D^DjA~cu)^aZ_rJR=Q7(hna_g?b*n~^fX{zKV8b8ghmRffSRtbHK+itb z@2aT4IJ>;YjS!^`UY-Pi%YnILcF)`~EUId8Z7o9(Kz_J{9bPCc!)K;pyutMj%Vp0C z^lgHJ(4giUfSQ<^rvdu-qR+fxYTA60zFAK(0*5CbSr(iGw;)lkC&{_!?>4S1=pj#n zkaD+aRTBCuxt9mGn0N_#;^~*SlLa2|$gDk|U51tpmYNgYrrCHL-{ZCRoohjU(y+f) zA*CARq6f28Mh<@N>>vTdvi}lo@7H4Ea}+WKk1gf_Q>WvG88bYfGMUiwaX^yyb|yan z&hIJyvDL62=bVM*1p~raS5_s?)@Wt_36y>Wv3d0I`)M$(c*okTJJm+@{iW?q)Q-*0 zR_Hfxr4tlvIB2@P-htdiGiaAz4AEfy)8w>!d^556OkO40{R3#*=sGj1UYnXY$)~_& z+?0`fz0>we~ol$doKa+-87+EF8!-d2De~flR&SY+x=rh+Khc`_E%c z*KbUuGM$kF9*l^gzZ$Qy`VI=Wfy1gRd3yH46t5~a?Vry`E1NQ|LiM}D?iQ}8UBHc; zB-#<)bh6X;xho{CXBB&xKi_8;i*eWB@)(0z2D2>^k6Wwd&GKwIX>QdOk;UjC&85-3 zsK%o7>67`x_Rd3B~F*+ztNAH zGK#?|&dthR4kjijC~{JX(*?&tJ`(#_UoYtxQWLThTZK<_a`IwM2_+?V7DUkK;Qp+4 zhD;e{W{k;JHF=Pl`VuzMK>U8k*v_Jc#UVtQ736d#jN>Wu8Qb}Yl)%7yA<)Uz*o3Xe zSm~-zIqk^;0V(aD2QjRtxXu`@yUNLb4|qHqTR0P1^XYDX@8#rQ6=X`)b&5vpP091e z^@l`aK`2yvbWyNYE08&@_=+ceeHYa47^|wuNhb#92xYF&??NN~`mQ$+QDd(}!lhbM z{Gn^U#jIPI=IMjwMJcxU8#Sr9bNy{KGp{4;!a>}G#yuY0#|urS@$xz>Lw3n&zTFKg z!wGqT(}my)A!TW4iidSx?4q6vGm8JK=Juq^wCMb{h%or8{?04yErGY6+n2*3Ns;ut z84;7ge%r~RDo3Gn2vs@f8q4lNYR?7EC@w5`&m6OA@;qp1MKWs^@ykWhTpjY6j zxubIFmRsW!QpZp?CCPYkmo8T^kL zRKDla)QYg-BN^`IHE35g14uTCFXIlV*Sq&N93{^9{hQiyCVbJ^cGY?64>=+8iLS#@ zvLaL4{APbi-6Dyw<9+oy@ajTpYg%0Pp^D4~Jyua&WR=;rQGtiWlB}5OhZtBY|FyQu zphGKc8U@?&Yem^Fbzp5Hb)~(C=Wmw1YqA8V4lj2;%c+W92vv|;X7`^rgg-Yu}G8!s3fV9V`&2s?yLGG)~+uSVOitWPN(Qnmr$mcoRZWK%%_a~ zQX?`a$s%luEdj$imHe9N-`$ht3d=Sv3dGgnOUxwCZi;so+HI*ZX&z^|wKON97Vt4? z8(unt8H2z5f!Wi9VQNQky~|Ip)UY8ebnV!xDz;`%)Mnh)85hDB7`e1b%JqMRJ_S(3TUOP@NxJw)PJI`8 z?PNuvz!bNF=v3a@i%rE>`>^`1bHg&57V!B?6;T4@juZFh6c}+8IR6b%F&`bp{(ud| zlyHbA&XIIiWFX*i$6u(xDH+@n&QG=bnq1GB8f`S%;3mVRv=qUNh_y$|E_}|=9td1u zGBCRG2)bB5sR}T0k-`i;FSt+RTcwx5aG25JdjXmcfi!2HcP zT#OOeggX0pgN=5sjyr-@3m%;kdg!``g@3ZVm}>i=HPP+cW-&U*a`4Zh%)_ro8+K_o z>cG>P`n6a~zh=Kw2yE70vkVvDcIU=MlL~O)z=d-V?_>WHd_^U*QfYHXD5Znas)w6# zD0{-Ux)?d3CnLitDLz2|ofOOxmOI*5gjX{oLd70`@~r zh3}i?j%aVp#QMV2W{5&VL?{MFwL?7(c66HyD}}=`4LLlhA?YF!JBRy@UQP_|mzXs1 zc^*vMDKnn`ESvs5n!T&EA{}_ydktR!V!9xl0?0y{EViC?A?;QF5(a)@gc_-$u<5O$ zmc$^`pcl2g@~@<@czcfE9L7dJYQ(#hGfvl9Sr&yiyiybSHLp6vlao7K+3d7^(J)O4 zl_Etyf9erfLj!R*8nX+y_P&^Ktq%s)jW8VQITjmDWtiIcLw)5K4HnRm1^|&|&((0J z-vItt7vl-+dbIDx`ljN+NjFDuOL1vb?&J_vURyXhlgA?g>|fkJKkpj~4swpH1lij(-Z*OS*ZT97cua{OF$dhC!y$0xLJuAoVB=sk&x| zEOiYjoJkY%Nxi~cUgk_VWVx&!SS5CqLSX#vl6?1j+xVoht^**zD zGaBKk%zTD~?omX6@qk0;;4dpmc(mtR2W4XWjtec5&^+sz3hl2rm7=U(&&d7-<*Z(( zwp(pSYSX|7%e$s}~s@Z|ocvuY*{cZd7fj zqR*du*2OIrG$k($Pfto|BVpRW2!b0W&yBV=FKM|fht9~`0_Be60MlQ@_o-kcCzn%d zMd*mRZ^m#5D4+mCCC*+_F?GAdYS;IeZ|Ds-7Ga3vaEf`;q#9SeQAyt`8}j93_|QSP z?(}6>`2Mr@PG)y?!IJ$g7%S&)PJj9vt~ezptS#s{uPl2=mxW>`FtRa*SQ%m*V%HW% zKXx}zpaeOL8K_gXRyQ||%?C9remAL0BJ-ajTynOv{li;j1f2F+{Y5Rtkdzss&7VKF z@3eaLV#><~n1R{tp*1ucH@mWr%JCjV_6|#Sa7+^L5)lQH>IYN%WLG~d;bhkR8NW8H z?2ioFs!Duz(ZUIv7>9&|>9nvgnovsdY9R+%;B^E$;-KXzJd74a+`jaT@gX%O-{Mk` z3r#w$1zInlZ?ib48%EUJNRuB)`8Y2A2D`r`^pSei?u_l#AFyfKJC$hT@TDRN$``#ZEeg5;G(aq5Y;vt64gX-MN0w! zl13h<51I;8Bqxt>dclQAjy!p<{0qm2((7V?Qb%U_!VIClt_-1bLivhm&`jk7S1~{O zY`a0H-;{=XXn#7Q^=4-pY(WMoKs^`17%lEWU{XnSwD8->;XdbT=!dJ?Uq>eVb$O)6 z3NRqX>G7!yp-Z1NgeG59Q5^#*LCD<&{o4h_l>^`a9y|ZAy zI`-LbE?!%>;970E1zMX)KjBwOna0)f@DEJ8J9Dw~SM?cZU7zHa%{-#R28>_5TGw8T4b8?se9xgG@=U^}x3b+Vz z2EE!1`3gR3L>JNX-RsJ2{+(SjY@*25ujO`yQrC3YkosE*)+5Q&GxFmJZN!)Tf3=`- zaG#<3{AdytpJIDS>K7NwCu|>~@K-RXFj00*<6^b#aP^NlTio;#gaFhtPO|Bl=|8KC zi=SS9ydO3TMUBz=Xa->)@yAKio=qVN@w71A^0fj(I2H!$JUinWVI+Ayg0DE?0fggf zS;n<@Y#FNXGhKwZ0nPOG{5bgM5TP@sS5*P~TY`e`e|q(8h(=ZE$g3O|6R!AT&=Xh~ zs}I*OAPD_1?qB#aSzOdFWlq)be$9>h5lkg)bnjAgbu|qSV7H@|pBvOy$x>kng5MB;=xmzSMj?${#>e1VXiGQ`*B&(F=sA6K)BF7(UbK=(%`x?<=^P1~ilBIu3x<@~dWHhx1OrmMN zeqo7aLrVJN(Xu0;+ZiiJnNC`flHGi%SB5@L z0~nZ^!ZKCz4edi<>gQXfM@Oue?*8!g%N1ryF15o*9?$nU4G)14_OQGn`VT?)y_i+@ z5cfxjEuS0-fWhXEEGlrAy={5Zz!jA@YDVECH#srV0*vezhyc2E+D8%xk))>K6F(() zEd?FzTr7<|Kjc*~&ywJ};QHXuQ1H{U&P66v-^GLTNn4dq=EmF?nsKz31AG=25_+Okv;SgZm^_mJXVg!r4 zZh6eF_zL;@>F9|LILzf;?zpS}#X08oZJnQeC-b4L_Zx z)y0RX`G0zxme4od+R9om?zSs6_6ry6v9wk2|5osqiyRBqpuaI9q(dOfo zD4XgiV=!({ET9IVK-=w}=b#O29j(kpTjVqPi(+E@1KXci3=UtMgHls|gvrCpHMLem zr`amkrd1|4QS+g}iwZZ&{4fP5VBO#kx4e)j$u^7QL;uCc3lSud-d8KOfh0Ap%r3>~vdvS8WUAk*lyJF694~OR_`mZ9|7sE0&PDr{9C<&{-K6Db2K};typrc-bF`!Y9O2 zQ7_>sSnHs-J5Kw@dqOzYCe3pVCk3Y-SvWKCsTIUNXmnzc^fy-dxS4l zvR?9&k$&>93RUJanyAHJqOPi6WJ=$Z4d7@O5Yf=!+GJl(7CJmoi*oC2xFySlTo=jW zdLPAT*iqH!oa_1sTv;IEx3zSNah{1?E_oo5J>rJKin3TYt zwq}Qm^wIy`jQ*?K?BXEteM5wW8m44o!({rv zUYA%RrncC1X@kS)^XW)Dn(dWW1|);GAt0yQ+JKe9SGCn^kGS-?K~txap;Nm1)B2Mr zY)}`5pwTkPfpRAzqzrz%F&gH+Lg+H)LP0%KTDN>y(v-kL7r<2?h8c-*wGpR)xfe>) z>O~OhiZ(3vU+1rI!STj9T?n2Rz3RQapY#td7%k!ItCo3oe5)S(QUTRuH1_YbFh~IluOwB|S(lH93y68I)h2PSur_ySnB_srmKGyihmUnde(w%qz+9i#9+b zs9k$OxPfk)S@uFMURP+uW0PRN@r$-|?z*UrATU8QH^O($)doOrr|+5l6xgKUut$H1 zc^FzrZbRQ|_iumirRK=jul((meCx}a*Xqjs@LioOl9rtlwTF6zrLi>+sAb8_tWLvr zH=hMN;kz)nzo_isfoM?Olt&EA^%Z%<84vF;(Tg%Uw3&JxvYwI1F`b4!ov>#M#?j}N<#?ZNWM_)2bmZ8s z-Xaj{Q82HyC9;?xL&fpb$tXq)1?bn5vVv3hPC_>eNM1~>E)bGJcP()CHvVZZ!gu>O zJO!c-6w)>EE^58`ZYctx@SSM5#k`Xne604L%O+a6rdBw#BUF1xLA2)7pmJ|&Mzm6c zc|9I6J?mT5UAW1v6-6Gg?4>vn|KbmA`1~-XNgR4AzILI$qCsK;60d0{{Wr|aT;I`X zs5Yp62@OG??rI;*RakeR=78R$^GeSx-RZNsRnvhOY^BZ(7pwQOh8F_^!!n#qe<^h+ zdasm?w>JhqZ08iAJGBnP%1*v{t! z;=<33MY(Y`+GV%c#5}2~k^?xFMf=v|BCzc@u7{kIve^8CXw)cW0pgyHWNDlZN1wf-zS(B5kq(OdArL#*%n>KvX+~__b$> ziv8ziTzQuneU=wPHfE{p^4e5IzHSptidV{%wsf4~S~L}wXmXDwxKU#Spv#(Yb=IlO z<_q{U4Hco&_z5$?#`LGZ-at<0!@kP!lOT%1$k4JH)hHdDzg0Dtv&nqML|SZVVb&Cp z!2qR0+}nCjleyX{*#&4@Jp6BpZqe-TLHqQT?|fICSG%q4g+tHEW6>aG0T!0WArzHx z0Z?r)r2dZIU~H$aYY34T(*yXzBn%zu-$8W}(ItVt^ z7X0E@=b61eQ^uhAXV4*22f#k(#rdQ=v3Q$^D>&}G_w+O7%k>0m#K~zZL;Bne$NCNO#3M1K>pNf-P{XS$aa;Rq`Aa1<>P=wNNrJu zsJTjCW`@AV`SSeCxij3s@83$M+YIdKIh5Gtu=A$>Cqr>Db6F=s!^}pV@hv4Hs8(G{@g{~emrBuvQdW*Y)`$sS z>dT53R}?c^I$<%(v{ySlU+~B`U=q3&s2NA+_KqDu74pCcIf8*~ZBh-9ij>N4tQo9D7qK8&Tus)QG~eaOr=x1W)UD97eV5 z)QVS@RJ5~LH(iD48Yz-#l#9)6RvG-n4S13gs2trgm*zB2!Wl)(B2{cUj=$w{+P7_Y z+74zM!#N-OKUAG#n`YsXrPH=;RvMMI%}U$0ZQGT$ZQHiqv~7FpbWitO^Aq-m*w2a; z5%(%rLn?|}hw&=GO)t|B4Zqs2dJqE`nHVeqG5`@~acr|^C}w4|v$Kn>e+V@(zh$El zh@s*djk^Q@tY7jU1EfEHDy?)v5R2NMb-lyuZZpUGQm?Dc=U(hhx!H)kYd!9B?6-k% zZ}Jp2O4lnRmA#MoSRsXs7B>3O7?@P==zkpJ?i*)csg(RRVQPY*4wHC;kCF+p^@C|i zR&@;G7%XsDoc^C&Bs%B|+xLf%x&y`Sy(EM&a50UUtQdT?D}sa1Xf{*wI7e#wd?l}D z`L3hSpM?BK5Fm6{()}I46r=g4pc#{G2{awLgEdQ$7uiD9YnscK@M;+$v-cKWE0fPm zmg}KIYqAk}1xRIE8+Aa7(o8`w~AZ!>xEK%PHryH=0>W8qVH&~%bA%WyE>^(yMoNCQ^mc?q_vRT2~1a} zvP>4dT>sguux3qnl`9V9ll7PH!hB}^Yr}1QJzcVsF`xvKW&`K8v3z}lbX=ymycuhR zcNWETNN{yum#1;;PE^`;LpYPuH?n*CQuNwj=RrU|_sU{$fb$)r6dU3=U%7$c@35F# zK75{Bm%jou7PCxCvmJlni7;&`e%|)t%8pN^OOuVk%^S!7w&3c@w3brNlT^cJR&J$UAy_bNFaMw?;t3GD^XWv-{ZF0XbosM_> z^Y;(!P7T}5NdjvM;N3z`BNDy-U&uL(^Q7n!T=g$EWLO4Zk$Qmfz6Ua));U2C{{fC_ zlG{?IW49%tJYQh{9}y;L0m=1iX=Ic{Qk~n#6=@0fpO`l?MlUev@-V3G>O(_qsE|!! z`d!6njsgxYEEA3lGN$R6(F^&m#4I$P9`gQ1@}s*;wDY=Goz}jdQ!N|)*;+tE>vy2f zyxHaJg`a8Ijdh95wdq;wJU{oDQzM(>GhJpnwkhr?@$<^67OdAfL$>EM1cT1LdabXO z5yRKgsfiYioFmEr7#%`Pv8dL5J5AGzqG!t9;-ZEb>4x zFj9-!o!Tgq-y$z z{+9d8O!K;0lD~{lsiB#`omJ$m*P@IAk8T#&)2`y%IBuxWz+63L(Q_JM&tA}^Qt($l z`2SW}&7)S%EgD*^p|rN}dkt;iU)B#lTQ&Z;Pi5TBwF z&Re0u2+$jc@pZ#Xz-{Cs68@JB>GhR(t;?pJ5I9va69~@F8w9Bxu6Y$J!6Nqks3WI1 zmue#}X9Dmp$L!WlKeqdsP=xi9!VGKe{giW3?1kw3`az_%fb^)J7?YjZwJXRU zAla7ndeohkoSJSn_8=y9rZ}Soocqi^>CB2jDWgngT6c1R5I)I<59m9FcBwnTU73vj zgg*)#UHa$@yEti&F2&`SL(nUN`0c(Z1`H#x^dR9-h%glWsAq0i#S~*n_L{%um)P3K zDnafP|L93MLSWs)ic&RX$m^q3`5z(UNo;Cz1t6jCgOYq%UV!#OWgiKRw^;in7q)M= zG@A98O&7yH?=SidabEsZ{$|IwH*y7U>i8a;FwqLLIt=V72UyIe$f~ut6;f z%AlfghA{LWOdrXp8Pifpl2JIZ&jbvmsvCE7cr**p1$*vAj!U6tv1s#mwjUM%(Fs6L zcO=(%O-*T$%A%qiMKJz&IFzrc?~^9{U(aN73Xj9ZVCBE$Qsql)B339(qqSE&O z=&4X&e8`JeJA=vZM^0GCpvs8Iiy+@*JrI0M1|Y-H2}#I@SSx(o~WJ4?U2XoV^86mQ<*d(%ja8g-oCsqJsj(<-F8QUFQZn z&5NQ**$pNtSANwQf}zM;9lW<7V8+-aa&~yPNvL4P%$g;x(ux_>gWanU2*AEd=7-8-KVeU6#*#gOp(V zY7GB6yucEO{YmX4TET8+7L&mTSao8vzFB57%w^<;LC#g20SkGa6PsL}mg{RiuTS$< z8%yhEgj7T6aSGln3d9N>r0@MX`Aw)#IFwk3uQ?!tN~?n<)M_V!h@_(?E=*5bg9X6G zdmAFLwX^aIla_jqlxmd=`*Q-j*~4Uzy79FDZZE7s5rNec(vUX#xTIeOs$ge8Xy+f^VNj_O6M051@fm#{F4{YCqhfW3=rF zMJPOuBdHT6sYv2w5l=Kk8+uJQ$a1NwXwIpBeWmIT)h*nNY?m!V_p7+;-qgcorERm4 zK`-y?*-tuj^2gV@hPK$j=L(DK-qDZYK~U-Cf(&x?1HS91aIYnN6$Lh*A4v9Wpy8=5$ zp{1Z}NLWtR_bIQQLm#RuX!H{A%?75awSxtgYzu8@<&OgaH>#Lt&FY%(ZdV17!~{I@ zQ`g}4Tj8bO_$K5rP*OOo@wb`wyU2N>e|62&cWy=-R&5fY4Q1MPo+oIf_*g9s%tmC? zHx%aJ1VexpqhF}~Ru=TCJ;{HG&dnvfvEYl$4v%j|)Duufjy#4J@hi&_dt4&F-hpPm zPe&XDD0*2Z(BQ+FT@qlWI!r#DFUEfM-y1!)MB16-S)bNEXMp)BwBs!{wE>;FV6PU{Pop2B! zZK74i7JuSa^jP&o#(}+K`uJK#?1W0Ifm%ZgmeZ8FOR-}t8q9n1&h?!R2)=O!P02jZ znuL-R@ScT$@qqma5)L81xkH3%IJ!M(#{hAk!LWq@pKZf<%%-~i>ILY@iv=~PFpfAd zLiZz;ZWK(VUwcT^UD_gEQe$Xyp1}Z|6aL=>;G5urbt?>Bz|g=JE0%3!G@_#&Mc_q} zxc#LH2{ULoh!Mm%S@Z&-brdu_dWof6(&;J0R{yTFQ?+Q^9(b%s)pYC3d|&Ns4$rx1 zVQ>2W?qGa8s(rg%Ty$<>lt#MVt+Ax$a+-|ly_ZZIQR-jxjM{u`e{}0jH&A+g?pv|( zdE*7Sv8d8I1G3}3JFd7M^K7>G^p%CvuBuOZOiwUmPQpjR4ehW7=<8klJ8ti4adSg$JNE+2IEk?!-kcL?54FdS&d;1Fe(U{mN`!8(ZA z)77!4fW}~1Y@(#{7Kmr$RtMLI3`N3aLG%-tQ7T2kw3M|;`0m7Fm#H-XjCf!G;#-3E z(%J=mZ{bPh z%bb$k{kyM|2CEyf8pLE9mdgZCHyAo}y3*z;6w8&US~{}?1+Ydn*`DfUJaHYDP2Mc& zt@4aieP5y`h48K*!S>kPAK`p#LG3y9OfinM0Opj^@iZFEew8;cuDet1rzG@-PZku7^^1H#%T!EzWV^ya8- z2<*^KtxR(EFPCL%DL>T6a{i4KW*AxNJL!wU@nSWPUJK?N+DMJM0PAuxY0@ z3t~BFVdfu(c3h*-%W|Q}rALF#eFU0iCZ z5Xq9*=A60LU+FG<)rn;CvXo|VsO@_OExi0`gm3IVAosL0zrC4Xb{{yc!MOLofv?z zT+eS>%gR_mDuuU#G_F@2q`it@bWpf4vMftS^3uV>bx zt`-^1(@-&sT57EnOg-~PE{hSLvdWRtuif@*K<<_MkQ0M&anwgeSkvBLsU%>|;5#1G zF+maT`ul*(3ccMz3Vc?UyspimxgmLhpIAl3fvUQNBrS;-iQ!7&KQ(9+#&C42#=_(hnY>GU~IFIwIA-2EDMmmGh>~6L?P23A>)sE>H9Ih~&Ft;^Y9Y z#YWFBeouDwIDAt*Z@!s?y%JGI^LcLEsXZRgYNJd6jCQC-!ff2U6HMBus;1-;_&)6+ zHfWPr8{BXAjjo?ZrPdA}GaW6L_1m(bEAtUs;5WhuI z4!SNs#DOz4&?3v_J$?0oc$_UwtfFr55+%&e)P?%N{Cy=BfszY&L?7)22zkw_1P+`N z9n1H%SOi+qXC0412Ger!1I6j7%25_{i9jSEzzro7qW-Jd@uBScP!BQrUKRlQ|8?p#5cfjKD}x;jXaH-wK=aN%MbjqNQ|@3U zeig~#hy_a+RrDo^<6Jih?#TlC!zc+$Yf}eNJeE-tt$Ubt3_ZiU-D1NHqKf2pWi$M21Eo*LK7j{=kW3A7yQ!_k}I0OjGLkP}7ZQ zFzUbhQpYXws^~31-KG!=yLiYT+}o%&Z)s16@lSG06GY6R-b*(Uo&v|VF-v<4uAu{` zPzOk)yw@X=kJAg%FNuS+*;mM1NAvCF?L?FyDzOtnE<$9i5g|x0=7*S~(eTvdn2`wl znHXLM(WU1%5QsWXa80PgPu-FVN3_XR)>3SPtBfdNp4&!N z_oY!1tVt<3&aov)BOc6@$-U*fM$ji>#Pw>KdaSE`!!pDEiGzJ-bn46h9SypuU?NKu0j~~=Y z@Gd-)OHj|Q`$gY^m}l+mEffF z9Fu^cwj4EG4BRyMMXVTpsa1(@cb3Vah)-`eLEj0FMb$FLcv2*{@YkG}ft??^QFqbP zo`UzYml2+XG2mR64$QEItJT<)vshX+wQvyvz8TCKn40+g=^EJ|>6BpSZ+){Nmn8Kj zAaX`DnpcSW|4nPAqZvj9SO<+ntA zh-ZO+m7+wZX?6a!LJ~=>eFRI$6JnD=VoIbir5hh2Hru(b5}!zVLH;B51pR&B`Vdn% zpl&X$>+KJA8g_&b5saoq#iQr5`}y*CdoLa4hxBQiLiz`KcH;3=J5SnDsIQwO%>J=l z#lOV_82rAY1Lhx~sqGCsTyOQ_7%}Bg3qtszW^TmN<9}$gzzPm^3Ot2`q)dpqDlh_i z`q=Xx83OFGm0QSATh|~-6yU-d3@rjepKMBfK}F2L#N$J|-J7FA=YJsxm_siqQ11T% zX$g9j&)9jm9UBU30ST;CDphZ(+OMQpSrK=U(C_XWx=DhoD2)&07$wyeti5+{RaI~R zCR;(3Pv$2MY`Vv(#39Nf81%Ba%%peRet5jZsuY!iTFcU#WtTuz-|uGFp|qPh=o@^X z%Wtgj-XM7U?5(p1en1_~J*X-I_xcFA(Eug|kK_B~R^?mNSKIbTf4FvA-yew7>3Iz$ zL}X`Si2;7K-SBx;z1Z?tQY{U=Ji7U=*Ezy!-Ga1j%$do?VjF}aHd_vpGCd3gZ2yWkfZ1k5{$@ipl|pV+{a*x1)3 z;*C$8n7{$o%Z`8-*j*k*=RtK0NNuQ705d#M)G#(JS8gf)6!UE=Cq`%z3LBMI;XeC7 zdrdfNS^t-3>F4UuhrqMu6qDGkfjdduy>KA|FdOb#`<7|RC}&M+448!g_P+U2664$v z!aQ<9H6<1FXh1b&2;nQ0sZBC@2xRNrWQgHFZR7*VKV0c)U>Ot%G8d2va+p6dQPOAr z{-{(;Zy@YEw#()hK02>Yge zDhF6UQ*#EB@nGPJINWJ<8REm)OYBUeoB|vRs8x)b3K$8;9xbG)3r&}R?n-6h=a|uX zLmRnQC67u<6GSD)O;X|=s(FCzc`PY<8Q+supcH^5j~tKRT*(}p&Uo93_vJ9mkbce> z64`}xk4_J@f*?A6Z>fS1+o;6T7Nmex(jM7ea2m(?TK3GL{hEbxz%?yRk^~H>}cDXztv%3~lfQLDVBiRUIN0r2o(c>cn zmOVoa2$A$I92#;A9d`#z{$wkYZ;{;etjY{hfsyQ`hdQg zN8`kgi%?W0-?NLOJ5NO||7z-7yzSoryPC-Wv>b9b3slT(;JWj9Eb2=%1!KtkJkxuSj%NS4;QCM+D zR~*t&O-hYVRUVJFJ*kDLfo)7pj$T*UCt}7t10fLPM8c|%A+O?Hm3U7xL;CN^SbL(< zA1VR1Eenx&zw{ROEb`@?M7X<4XdJ~b0p|j({2331BT`|buh3sv5_g%}22vbpGS1D> z;&4K^04oLColgHQgXrw{Cq{TF3e&X@$6Bv$OXZ;1 zzkNXWe8Us_26qw*`H&NQp$Dtw_QJX`&@Poc6JaB!Y{}Az$D?dsMUDq=1H|Cs1Nc;&y)^I&Nq!w=J{WuLb_r zo6oNw6J@8gswsl&RozdmnWV6m5sZt=jYxw=(xnqs+zxN-tV|pCQxd?XhL$$&{%KnQ ze%pg`i^~H+>?-ac9)ao$u6x`m{(z(X4lKg32}M@11!7iow)7{QoC+K&L_Hl?`Xh+n zi15r9%uZrFYuNcxH1KaNo94In$(5ze$#ZYI1jttR)LZp#DY^d3%*(3RI{rkzgA-P^ z5@TbHdDNE_ddgnyjuX#rqN|9{GMi*-8BrRxrcR_XB6O6mwJn7|3mvbvY^_6scLP?V zwZs>FIl$4lkDeKPMK7DWoRtrhwFHCl0{z!LS9!Tdua}cqVeJ7ISLaQIkT3Q*2c2n( z+4OQY=T{9|pc@jWX;}iuJ0He?#gQ%=oiwk;B zGdHy~vu*VIbn@7eb}uHk)y~<&(}zdnFQzOv-DuA!;|QO?+9`NY={RxLxzRysT~eKt4Q@5F7-_o z%o;fthA|Jx+J!^#q6_hH=<(HiB$4#6!>dX}wh2`YRT*C)6{iY!zifuM*O3hE{rd?f zG?|Z|na?TCMA=NC;U7~faUafzU5q=GZMXeuN}wBp zfhIk&hC~$sZH_)6{&=z073cvqzduhpkSk6q<8s~9YRI2q`>0&_*@gv$h-7}c^z-%d zG~_M==t#)Je5R>f4@CCbTH6^LFLgWK*XpJwTVe zzxm}fl&DMB-YA$fL+{a0DF$G$FfXr9n_G@uGqa36IM@hEMj)>aGt;!|wwrH=GM?yG z))r=1rk$!^{`oS-x(GogVYXk9bhEMmW&Ur{O#R{sn8~SJulJ1>x7jb%9Zr32RYVP^ zRk@As&VDgDIe-b+MJ~@rhKn^p-N-`XG<InAo*l7~Q8~K!82fO7gz5OxK{@3c*{Rkn?M?-cm>)~FK8U0$E-+e|i ztCej)zs!Lz@_~^Xhx8e8vUPco? z9{;yWxqH0V$87dOk9J|5K^h>hL(nRn1ltlVs;e=+>_m{`!iRqs<@gZ)J)Sqz+wrIP zJ!eU#_KyW^UHu@z5a7H9c7?(g38m&Kt7 z9B#X1qH-@(B}vVM7kngZoKnR-d2S*Y-=iQj1E0GJMOI(4JWGW~AW)Kc*>!`{iCmJV zNFG9vj>eJ8fy9y`fEfOM2Y7(IxguRZZPoVJjFbtojjy2A zBWw&;(g~tEsjGDXr%pljyHdi!_j#g;g9Y*MP545Z@}l@B6*0xt*R>DDt%y)2VeQe2 z0=x-=OU>pmYdhq@k0FkEH&%i1Qy#9`A2#W$WEs;Z;1YEI8ESK=cEFvg(& z=na#0@A$$j%u=!Zg);N^`jaH++NyG}$f&I<82-IObVh2ngejFj9P?}l<4g#n@U+1#jMN|I5o19!B5oaTZdYOW)EOE>ehFg zgb*;^OuqPN+tVO2RmjxSY6npagq8cbI=QU%^)XeuHmog7*W|k1eLnWse}cO2m-IHc z?Rp0i)UyoaMyG_;c*V;k|1hv0UY!c}+PG~!%_7ZtRY#Fuo1D9N9HKunGc+vu3`aH| zsAh55sMTiG^)E84y(!PGU#_!XZAPSBKAn66AmV=3j@MtRd$LCVZrm?KPs_>?+ot3f zuX`f7uQuHeUmycyzeYY905ZOJo zxlDdORQ{DSWio;2ApKOb20HbOZ+`SytczjKH$9;%8;CdT7N)r(ec#=+-+{bOo0TnA zqp4`BA9B8LuyO7^YTG;(D89Y-?ehJi-369gPZQw^%V$4Fneu;GyA^Tq49La^c-vN= zuQxFY*}4e1Jx17`oHxKJz>kkHb&R@*cSo_PWgif8z1DjkUxjZpChpv3(pAB{uM@ni znzrn^d;kcSTNb^KZ(;ah!B?xX-A1_`FVFBEpE=+rK>t}L^R~t-a}vx@wt0IU!@1dg zrTv(jSlL-Ow23j$FP{xD-TECoyEz*R8og6M`MvO#(6=Yg2?aupY=)jQl({0go(Mvk ze4T;<{qHwIMNci5&{l!RB%C6~-3O%>Ogch?bQ|o+np3;*{< zOGai(F3(SHb#tY)liJDURnks#j!kEkpG#+q9%mfNHAoVyw0RzGRjprTbu^~6vKM3$ z>{W};j-r+Ag;*ude~exG%}d!X8qPYRL4 z9`$@~^1Sa-LU=^|SXg7iX zTNM_4`P)*)<5}{0jZYsH)kwt3oK#R;vqd4wKJ6H}3JH^8RkMPpH;|3_)kr%}=+V8a zNfO!`K5L=ruL0%8lq6I+r&#*PkKauI}@$K&LFtY8tQbRx%I4Ek8Mm zwVgjSNkAsb4H@N?sL%dQ7KjPvJ?L4H2%4^_GImCJ>j2!2Oj~N>SZyfZag)$}7bS|F z%wVgKzgi6hb0gwas*_wI8#BQ7L>NVOJ^(U!*zUxmZ05HwJIt{OEZZS$u#$XAbsHI< z=pIJ|nI2k)vm1ecaR%kFj@znp@or%%-%+_$Y)T26s?VL;^3I;XwL{G^1#f#8R}_Sf zq~A%8l895bR*9@}g60tM8u>}G-T96k%L8q-ZhK%Vfr089(lt^wGV`0seM(;ktS^cE zWFkAiHf?v$qs_DRBuEbHf(_~OEfA+MGjAfc0>1(M*a z0KfZ6mu7};ZLYnMjn933CYRR=wn{VQb{~75jlJo49Tf4q<=@Q^l%|bp_2aRP{b>_E z|J%--`)uBw>6?eVI$&#UE+W(`ZOirL#CmiavO0i#kEYUvjg2ST^&^mOM&3}pI-s$J z`!k#|yPx1pHKAXA3r#{>CN40uw7jP1qY+V{jYfE^oaY_}mAT8s^|Il}Bz0K6OEy~7 zCzyv*R^}B3xqr}3C;g)iZ|>q?>u5&`+LD^xoMM~~W}yQ%pv2lJib_sSFVoU*lMGKY z$9o*$4B3m&h>iKB>rZ}?b!G}(EHBjeOSPC-N^68O}twfZ=^M|YR1?4@bPOL zK-_e37G8^Eas0WyItO|NO9Jlwk@vmp5cPS8D78*W@8OQU?1ea{$^Al;?$52S{n_HL ztL+-R76R%G>fZ8HG^YO#njkY86bJAAISmOPG93pHuauke!$&bpe zf&Yyhf1vkXl!IfYLM_SXe$|hv^(UzNxI`@a)tr%U0*OZkB23UPxPtB%0==aXs9c%~ z+e~WUsBzd9P6d6@N zw9&1X$SZLH7durOT%B&<{T_6&gM9oDX}0zZFk3RtggsrI6uHqDZk?pR zRKegD=ruT-V3odcVqGB7k{&BkY!gQ{Na|_oT$uQoCIlTNf3KWZ9{Y;WT?Busbb2gh zC}<>%I&FycL^=k;AID$ZuRIEOVG>WWN73HO9LW-V;^8H6CR5icg>B_z~O%E@UZj<@4C zy5P!~r;no)7G$O zl(E!mS8ORjc$FF|p?_-{#~+@m9I0zx&p^y(yhk;?p4UrC5Ke7`^g~^3kddD14_0@P zd<;;;2Aa+38iTcMHiJ#yR=5cpg2ZnQvd%5Mp3Vq24j-Gg?#4)4ynX~He>dqK02gKnyI!Af(0b_AquTZ8gL=gQ0(kZ6RW9+eJ-o05x$O#-jaDSKygXgk zO<702e7e_C^;2L!T43?Kcb1n$ed=e4C>F%mRQ8L!@KFHlmT_}oyYx-mKVPN4K)2_5 zZsEJmNo$TudVkv=yNG`vG(GY6mu)DXu0>Mhq61k{+{FzJP-IY|+4?wN=w(-(s3cLK8@?~oe4{HYfa4-D=E%AR! zESC%NvEl`>6+!@x$9oSor~qa1mI7nd+Qc2;`rHgCL4f~j`-%UqTsueE*2nSd7V-CV zasN)3Lo6kB^I23asRt{Wx@Lxhx&ubL@=?#9aOn+Gb?E-fECBD(YwB)W*Gz$%fy{{I3{VwwJB=C$=DAFfUt zJZ@4Uy_I>95!8b5jLLhXrF7B$KnIuop#xJ230+{8$nkMf_B3c=)h%IzDM9ItZ@xldyUIUi0|$hn36eW zZ?Mh+#uZF-S1n9B6%hMW9PXxT+mHj84AdVbR4NNiomNw@)IN3Z>dLcG?I7$X1B0$A zb0HYl)C8fS%}+xj27;7gMoMK@Nvz9OB~y|uD6z zB8-a0yX9r=d@HGn)Me0}En8=t^dLtAx__u|K3yTias%%`)B`z=hAYp&@aCdsH6)#_ z;+w0pazWH}bi12OtShxx3>O(?U=mA8K1_Xi#mNFLZ(g$#HR{H%Zi1_> zb~|AR`-iz@e9ry8Xua&@_udwa&F1MQcq~Opb-5iSXhW^M82$UD2dJCU`?){pk@vB7 z1i)vA5?!r-f5+)H%t+yw~dB8r#5LJb}{;;cHZ zA*pAeMQB$fk{|9v=*V*3MS?_fm{Y({)td>SAa*VnSaa!)s;tNqRtYi6Cdacv(0OR< zxQMh^c3ZB@`6|x*a0T4%qBjXh&()CUz{!VTij0A~|N2^5L`%^wPz%z;+~^`Oh{wGT zbIc}SZWE*dQIdKEM~J9D6Qy`_S*cA1I$N+P6=w~RK4X%#Awy+k2BFYIo9)#j;niiD zu|V(ciz28M2O+$;dUE;ee*$2GwmA%)=<1TlbT6d|9)|}Xw-fRo9pX_)`zB64)`o|o z9A^CXaTLJjq0%JXMskzwte{)+>)JU-$T~Q@j)mG&dOJrQ0?&$+ra#GlrP6LHrk|yt zxS$)!vEFyYn?if{q*87R9|^HP>}>j==ZU0v1K&sB57#l$8opSo@r9Ig7h&klk>>bA zH-GiBxn!1H0S?>InVWlCMd=dmB6(e)jPX5a909eOV|L90YU$@kj|$v^P`MY1Zc8Jt znC7|B{DP2~-DPPe#|MfhM8D(T^_pdt2w$anusb>3UK!hNTr7alrqqMp$sGqcT4Y#1 z9ka-p_q+!y@VT*{;Mhm;JH=Q^ASt3#web+b%k$SEv*`Jqwh`WNe4G6O7>wgFom^DA zS{ProwswxcBLkQ_9^&Fw2OYFNU;3fRKJm7cTQNv?;@U{!++hABzTE$_BJIrZ?ZW69 zrn-jS05Q|NEl#s^GX6w)jc%QNj@d28CAZ#@DB+8Z=RRN_5-#HHv8X%4km{rI@74(< zy$nYfH$$YuZ@Jg!c9vuI)LR}EJh%1b*d{6ue3>}DTdGk>=G9D4C!Z-kkMZnsMG=ux zTO5!B4;WsA*2}_#+UCD_dGg(U;elIsEAb?u96kOiPy2<(0+p~|$q;D4H#~Wk*O?2; z9z%XUe>eV^s83nirZ)e%?KXN)D(Xmrmuu5a((*t?a6LYjgKGEKT z^fNqqZN`Ah(C8xPmDMc&ruQ|uBUuZ1&1XqDqitNL%B_Gaii>x_6QKX0do8v{%13vw zQWT=AkJ}ER>#N1~1PF55v1I7><=HBvqx(vSO}m1`iby)vVb$%o^aLJ+=Ypa8?{dZ5_p)P;(32|g@QqMbZ^M#89#Ex|za?zzFT5NQaNGTycW zj7+|fwly8T&P&1al@Rq@h%Oc$GxWO0?t_Vh7!UL4jld-wC~fmz@it>eKL%?j(x~N; zQLAuNE^JND(lx0iHprx+J*zqH@QiGZ1qR))%t0^_L9_Pq;-mpC2F8iT7z9VswNHEJ zte+K8^s~F57>HB@klp8zba3h>o7TRz5Oq{Qa`;WV(m+C0lY?S9P$ceMJQ6LrMYgKaYYPeqZo(m! zUbZV{6&+FNOF>dY*Gri8QmxDNB2oBEb_B2u7tV&-F$qe93)@Ba73A zvPu-CSKn9}5-E!sJr_3sevRYd$XDu8>)6MX*tPYCHb^NvX?S*Y9!Qu&3;VEQmVnT$ z4I(fFW9NM^p#WKxibBY?n{#Mz16(#OAet7AxiPLp7yKPW1kSwQk)`?;ofuiQYb+A(BL6^8D^UA72+6e&J z8sK?+A6B|v4&SU_KBA%en;(`-;#Hk&%e;YQ(Z*jaJSTXbqfzh=e9TaGmU&2JQpB_iX+fxmEbEE1QfOr} z#6t4dTS7jCY5MKvR#gSQ8YQ@p%)?;*55f z6BXSVuN{=%B!+_hVBvY|EBt151>V3NycGf+%=OtC^ruCbN?e)Sjf?AKP!1KdqsbV9 zw80_U$H4($JF_`V&5#5s^zic8FWuf6ITFGeLW=|(`&NO@G7vG6kLau5qn|Cm|E+j5 zm`|Ojjg*oV!;DH0y!$q&w@W76bp9(jw2Tk#a4F5{5|CW;X(3PVQ#V^wYzPZqM zo*1j-CQkZC8wI6O=a>F3-ULRWc0qw?oUgfz32343prkP08mRg7S0j&K6JJZEH3+17 z*0w5dXJd!enJJ;zMQE=V}~WzYyQn2;)cUBVD#Afkmta#M*oF4i;Ht}rj=LP?V;k+!l&IEd++}eV%+ebc%n_> zi=58&x(YG-?w+2}F&*c4Q{^mx)f}32k0{LofTMKZoYvBU+MR70@n&*eU7iuvX`&6s zr)n&kcrOR}(LH`k)=-73?!mQXqZ5T9-YPY*5s_hX+*^f6Zr5y2XLULCWk{jA?q#!c zVt$Zkrguo;@Yq>|gjSnI$*$)V^-DLLHd-Ue#kNyJs5(eYgNMQ-^-ye;<})|@A+AAl=VJp10*C4Y;f;FFk*NTnjkmn0hN@z&qyXOsEiwl)v? zqTxdzD__w5u5qV-P}@2Jvpt3*4v{Ms#IgF#i1# z3c$#F(V#TgEb}HTFRT0Iwq+nj)Cl8f#PA@nidKS-uE|9|m<0gXUw>}2IO*e}US@iO zM9fGY{mxn;@+kDJc&)gHqQU~tjCb_`QQ;F^iG|I>F?)G6uK` zyfANUz^L>7%hw7LnN1vt5IS<9L@q&jY*=Ul6G4mDn6>Cr16EHWu7qh&uvOafuS_+& zxVy0amyMTCBC>PWCQ+A^|5rdfc$N1Q9>4D)v?-oMTOs=}wmq1w| z5MJ7ArSGW}%xJMTI;O)PLy?G@p>jOPib&=1Na>s{s0yzlN{SG-`wAVNFUl5|RlE5u zz!%fXt1gZSbQQ}%ttRGV$?CbQeTh%{L%#Ush2IlDaqza$3*TcH)+Znuj&3RdQ#U6` zm_Nx>t1^2|+v;fncJ>?B>+R`gBOCFPrt_ty)&LAu5lq-XlV0a4SUTm_^AF`1Vdc3% zKxw7S^9%#6ev|ctso2cM)G2tT*7SO&T~}zxosR2{kzReZmh0NokR&eebBS!UUVZxJ z-)^UCZfg_Gy6tOME&L7Rtxm#5@!rQBExQj4E6XCnQn28Gfg$sw^gq>4Jksi}enOS6 zCp1!RlY~txfzUhr{bHN>T$0}k4xqzM1C&s!4z)GJAfb??*m<5>UhbzMHJ z@8}bMASje@xr|FanejoBPKX#m6YliWr^IG0UwETkg+w(9z zJej@)OJ`6aApXb*hdH1;P}!QCyMV6!2cKaSLu5N0)5sn#Y~7*K7H1%Os`YK~>$xK{ zqNaax@#esk>Ppkxa@KU6hx73_+3%*pNU~zQ@|T~z1mnb>+xe37>*LQ?zm+|=?jGFL zj#d?&v|N_pzk5bnS|bI@O@`KLdDa}deNtJTW)7E2q@qB|zUMjo#d3nWTLdt9;!#MN z>G_8!S35mE;Xc`it-mai{5Spt%~7|X>esJD#67U+z{*XW}eMg z=1RapuhOQeo9HOdRovJECIsVtRpFvwPuw0k!{I7%f17+_F>?DKFMf?lXVbd)7#m_k z`!Ne*nu?`Sg*-01Lsq;7+FI_<-U`rq-+SL2q1U@k1gga4~9$7tFxsg;YLQv&DV>!bX@fYiVL_UmFnpM@KqC1Gam(4)xsIAjs zA`_2l@p5s+1*EZ3v(=X9$#DP(M~OIg(pVuwzZh1FW|X(d{znH<+i{U=?IpP z>HaPRG&o&I?J`YdY}ZC0mYBQGz4Q(1!1*0Lw#zN#9Ccd&T=5Mptj_>mUPG4G_@-Vg zgE|@{@&sCc-jczIUl zmm{)0cP%o-TO0<5#0fJ_vzz~hm~7gw@d!DDKLiZX;}9&BRM!KCNFaKa=NYaS&_NW| zd5=Yk)=JNf!@mj~H)nUMCX{20Iq_)ycwEQ@+ ze{CUj4nNt#m|4ge;gT6U5;mlh^q_d#&1sWT3dD2Wp!W154vTG6SdBYdh){;Y+TMP@ zw>N*{5hJn8pAVG_J)dErJt4)G72+-#sdWvL_$UvpucQFEAX8jvGnwt_(QT<$|cheZ7{0q>RdGg z3KGt>S$f><;i-(FnF$7@#L5y|osgFR!QA9I%Qp9~(h(?-3lzkepNNJuWy0qX1YImW zPfetR^6>nZpbBnov@+y0GwE_djh}~?4vSxA#Hdq2hln>Ej{Fk=V^nw@EPXmz+|k1> zoB?XB{*E=pwhp14DT}4h@cQ^TI!w$Z?LzD9Jk{*Gsz^e7LWIr9{356srrz?-RzmaOL!j$5k=yo)nx1?}O`ycP zJh3M(H%jS)a?joA367y#wz%*%_G%A$X)qk}HMTZ96rNch2db|z3&M6>>fV&t)Sh2%6~oTwKZR%T3h%BMJPFVXB10|@LLm^k&jzbnyHAb_s@2&^vW~s`j$mm=%%%2$kmOHan=FoeY_N;eYODoh znnhv$$@?+#9yHy8zx@ou3zDSx6(8Q+)jD_XwdH|LM}Im(|3R4&pNKdjpz?xH-N6Z- zE=68yLnbBnfxphEsyB}ZT5P(zIP@BOZ~NSCQoCLnYjWl5oK-IfJEs37>3BDjeyfd;r+B#mkHwi#eUXNc|B1Nd4g(SFE;g$_ zxLL7gO_Cgw(3Y(?jj$Ew8vkhy(K-%NbnMqk9PI4&Ku{mlHmcu%$b21JCsVU8r8|~E z^G{VF5`@!fuJuXH$PH!jm3bTN+;N? z%c&z!buIkEMZFy~NIb2T6&S&cK0>#ejPeSZqKz7OZl0- zPC@Ogvh$Q%Rc>g-{Pu$*_^j{+Rt8;epaLp>UUdp~K+PS7 zK1gfk6TB==7Q*$H+Se|#u$k^x{T$})(dK}n)+9g=cI{}}VmX=+$u~nDK7>qTWqEhT z+y>e}&kiJKK;X4l1I@Hb5AABG4%Ydh@tL-6A0xx#EXj#vD0|=UCB*I8f%JLsxbQ=| zn%!Q<0elJ;M7QrU4n-FQ$$VD2@?3wte)LzRKV1h42|oIK+Qhgnrh^X0t`KSZ(g!FRoB7 z8`K6YQFK5W7gtu}uNp0@oFSd+Q!iFwBN!)|W_|sir59@VUKhma9RXT|srQ7OOYCi5 zH+Z<3R(dGzsS9H-j@QDJf~7Lkc6jTbwd0`8)uG4M&VWpsMJ85LSwsHNhu<$Aeka)xnmN&2}%MTI=@Q4el|gqlU{J=_9ccqqOJFU)fYoYB_UMI@%Z4X)Y6BQ=AZ0FQ5q(9|%B zw?ps_>m1|2=b+ik09S z&k?NX6pYkj7{bt!knqlrfeFvAj)bGx0SCHtK-SZY{}JTZk2J3>87SstEY0iAuj_U5 z(d>&XWKgW!7jGe1_p!er=@>ot5ov_gvkF8{R${{lCaH@TfW5 ztSUCox;*$iyrx_xTMr4KmerOId>zL4y-TJOP()EslyfZ5?>d)5^%%Mt|{j&Ubyn~$A zDbPjTwGYG`iZ0jFb>Duzm2X91Huo=$obqyrH3z|c)@yATrl^s z)49d@^g?$GP}U~dTi>)kXr83ft*$o|{Q=g~S&8Bn)mX)Ag%r)869+m{eO(uU?CtH4ZsJmE9@QhO z9$xRI$Qo~1iPm8PwQkF_{Y9sNltt#{qiG>0$@$#(X3EgBg}6uWc4Y$Pmg^75t~i^G z`8m8_z=csZ9Na?d2F)iKgMj1Ts5?j$I8xXVWpKr@nwd~lTZ=nq{oHO_{+T&G8zmUR zX4Uy2NJ7)L95vsKzX7!qx>WuYAIz;)23@Nv^IT7t2agu#S-nj8mEVqUG8Gu1Hm26C z(V>B8+W1Up_s9pR+f;@r*F&BubED&rcUnYxjpE!gS}kur-`O}z+{nG9M7iu{X?T<` zL7u+ku(bb%)8wGinpFJcICAGTMhjg7GxdvGF?S7GU|hmlygx14YD|D2YG`H;q3x?W zwNPns_#gjFu_5TKuQ<>MKU6>-@H@ISe?kQ%ahyp^Qd!)Pxjb4dsFGI&^;_7U@!iZ{c@j5}QgFku zWjo!D;e8JOHlGa`0Zb<2XatSw;5jS%PSYoto(JQyz4j}u>t-GaGpi~&5PCN1A2vTo zAwbHy>T0FTOg~KEV<$J48%*_U!X26%6|wWaGl~BJ#in}~*Bf94)g+jz5V>TnG96z;3tsX2AKw z*==-yN%t+PhZ(cT&Vl58d)@Uxj8b7xj^GcR>1Z%tyItcUK-{O(?y35pse9*^;J;&f zS7qNFL8|JNfwlTIMb#jX5pe-(3g({<-}hOcdy)rjLhaLYjd*<)@%VOS|0p_>axvTf z#hPxQ72ru>=*KcxPkdor#0FL(91ErB^yn(l`sF3PaMyYR&>T4uzATOwgbp(!{dj~| zcEd*!3{A1v@rQg&&a-s z`<|#3Poskx2s6Y8$eQAm&yG$D{rL)$=}%E@DDhUF;Ig{PjF=)srLaTvAlB@)g7p@A zoZ|{2VQQoCkc+ys5qP31;LPe*jR%FgrVSA_M_wa$qWxf5J<=9Z*>7o`YWdIN*jjB^ zlT6WapUv0xNLj$+T@NB9utIQFx`9M$h^F%M`FNxEm&^r3S!ieDaXI>KI}r-5b?LRI zT;>{Uq`30EhLg{>kcmSqb72*oW50a5 zh&)4?!rNl_toxN`nWq?WX1*Hh`@?8nM4)xwiq^QdCp*xeO>owjSL zwNrAF5eX-r$E70h#Uqie(@u zom7H%iw3hA714VMaE;j6)l_c{^z1r6BBDEMNQU;3Ma)7lfb@B2Fie}KHVv&U#?k3% ze_Kpy+Ww`sF*KgduEjRReT`yDZS;*rJqO3@U!kEo{IF1=uylPdoq7#Z zQiO`Zl>u5l`*2S$!M9K}u1w(VJJj#5L(*i2tJ4a*sy{(49KmBt+Dz@tE-pQ`ru~*R z*+ZxPaf14%%h@6_FPc@g9ud{o4zN@q^Xs}!q3%gPHVLv#M=u0jB^Cz<`5@m(|41UP zIyO_JA9}+VXg{S4>{<`8p>HatGB#y4^h)e5{+j0YwGln_b3fVGtg`~V`?U+d2nl#^ zjTQZ>LrFmzc{)6UYMh!Kk8zuF zDL&R0Sa-p+XYi%gOL=;r{E{I)eN7X(ONO_VxoB{*Tbw+t6=GYsUp}DOR_6`gbI=GA3$@O;W7wY;0}wgy zh;q(-FhA~bMGuWDl1Po}Aea&o^ryFLALJ|@Hw2_72VLG7wTW%f*9jv{&n=TP>sMqX zS5sW&Yge}iRS>=_@q|*?@Tij8;7mi5;04Ea#P@G`abt@!qfMxBY5LQ?3)7hcyCK|v z1O9IK-c)k)UE9Fv>gUSgSfAM<$r-l%QuM1*Lt#f63KEqMW19~qt^$9rSYQW(h0S5t z!=VC6>anR`-kD;n6uY&AOSulddmY2%mthWOlC9N}sn~ud^b)3udGV1fKgP zE7-Ig#{I@K1Mo>@Qe*VVBbDJ;`@n1OJGYfjP9lI@YE?~(_o-XC3zTlBn(+6F1&e>A zpMkEewVdA(TC}ZuGiXt;94vfVRTU^R{;CQ19!lK9L0nmkgzaiOuYf)W?E$ucsquUx zv_`9IfyEiO%%}Q=J##Jzv5AyTlJd# zrEP4()2yV|dfBmnlS{X+Jj-Ihu#ZFj5>5}aJ&iER?lwu)^?Bp)a9@7CBRq|qdQ)ik zJa=oqe1|M@MD*7-X;}+Z=}m(*@T2cIa(A)namEbn>X*QaJWSCe?msLjZVo#pCad&4 zU@~?dOr5TceQqOJb}|bS-%6Y8WpBRhON5**74euCq9RFoPA?iaG}ihrP`o__SpE9J zV7cI{lW~ItH!mX&;tEFC!5|kj!A$bUsQfxUfNGG|5FVLX-&L>S{&Cg~bnLtu=KgVH z3aO@O)@L|4NCuI!Osq8#evsw)1bR{1FrX@=C{GxGM+w5L(`ghFK9l`5@_)+&H-!>( zLR~?<_b$&+99n>pqd@~{0`*j~R?B)JcaUM_S;7p)_D-aU9J9K433@hYj&xDxmGM&0# zvgNq2d)&ts3PlHG>9?rY{ZX<5FKicGNhQ+0$+a9do?_CNFTd3>jz?zrWJ4lI<<=B8vT&0V%DDB3Ck zd12`HF-Db`6=a7SqW}g3-Mw}ZSzE7zH%#APb77olqCbe{uL>sKH{Ti9=4$+;1U>@d zF+`%W2^s>Zx+fHfqUFyuQ$UuS zjk{(CGKk+or^>)H={b?)dTMbkJ!aMyG3-YhxC$mwQ4lsOa^Ui8R-+4H?oi@opqo3H zyM+}lt=T9lcuJV}o1aIGNR1$Wl!D}usK6L;2B*KkDQ?zCEi~;*YYJ4bH)_*Oj!&}3 zJca&wT^AoBdY}<`$iK&nYeB3xR>GML~)ATt`JgtwsC&2e0u)@`~CRiK!Bem+P z754-3wE?!JBi=22XE~aA@mA^ zT24%@-$2-5s8XDL_UP$K)n>oDf}q&Mp7BKkBC7|X zUS=E=+e)D)$I?70dkX)F(FnZfVw$F{n3N)hVLv0e;&^5yabsZnb`Nr?9h{s=JqQ$bxOQfvmHGa9{{W!-Q@maaMosSC@ zn~&+z%pY&?ROL|E!c)<#_MtM%gvcp~<-+w%O!+-4*gi`?M&LbmZoUX9u>uZDF^X3t zV}70=8_F0lz?qQNqMdlTO8K7{Jj)f8+jSN}pi~*4Mfm;9+G+tt4-0l^uhos3G~anNAgC+m5@`;X^$ZBqZ704@1A>VBnd$dsp2b##@g9a- z@^8r>U2Gy?@YAX}MVn$8Gnl6&A?by=(YG2eGHbJSXvAkpF+`>Zd-#O0rW|O7WySah ziy_%1tQ(HN)VBNAfs=w)*x#*%c7G^Y1Q5qhj?0P-sjlj`U(T-YE=>9|oqN7ms|;fH zH11T8ov2;&8@p$G#WXYG7reT9Ae?{TU3Yd{PAw%>c$f01IP5zX&Izb{pm@{C)9Tej zWwo?T{u1-<$D5x4dSLdO8wwXj-x^eh+1g*cf2O^EZ&P2u)hXBfAYhklRcObFMPeU2 zyEt!byzocOAUpgiI%51)b;xTXAN0_+xsg-1pIph!9UQ_qTBdHRda;n7Q-iWScjW~? zITh^V6SgO5feQVXAx&c}vB64D%TcI`{^(mjSNUju1|s_@3mWyvj?=dgk#KfD9@;TN zu%VruokSs{j0qB!tVHe0we8wxUQ4LoxQ0&M#ORKUe+PdA33G;GF2C;B2s}OFx}Rqg z``p}JEI+x3fXs&}8(uE_aH`+L5MBFEp_$N&DqE{;3`bnUj`=cfJgtIVM9bl5u-2-_ z=l~O5T})r%D@wM=^6{(jp}Ok)XX41Zri}UDV$O;Vt7yCh@_xTnG>uDNJr%wmU(*57 z^H?UCU{!g}p8pzfZ{Qwyuhy`1LtpmOcKOEgSLB5-Sn1$^8GgbqT|+$Nxw zV?_OiR&gh41Yr&Y1l9=jcp&HKus@;~d3a^{=&HJF@rSJlfo^hfec}Z9n4k52B>c^8 znpjX8ABaYBT7_Qc%S=zNmymI6jtr5(?)oFpGP*vHwPs;s*mZG_^^)+m3L@XTpD}j8m#*T?0&+j*3u+jYJ5ymTZ3Ip`!Q_0EF9Sw!T&`l)3hF-+5FS%q+MRTjg}x$+ z$45H~o6iyMxI105lDv{ro1fH*Q=?f&f9lCo{d|@^;cF;HTEnek&MeFuMAub4!mW)R z%r$jsO!JzChxM+dy0p|PtrHmQHic=Ud=g~(vvC~?>Z_NWq?qQ$1q~!Wm>S8e-L#w( z?lV^CR#)7p=ojOQFPt4=KKz{T-2b=bb3IWa22q5ODyoR=s)t=(nU*kWal|N7p%~j; zYVL9ZZzjZ6^D${f6>W?|lLuuZ%CRE8P?ZzH*1GkOwpaZc0I5ISd5q0fE~^E@l9}-a ztISWdmfLp}eTVG3Uik5@#=8wed*Um%@|k?PnKnw3KP&u;VE(zpU=W|CR^?g+aCsKK zOT+2I?xN|1uMbUsJ;d;AK=TKDd1z*k9((4Z+(%h>=zPHE>6E%;cLYC)snp+KCbLY+ z>SRnAgwsiLK!c?A|EMbK*Z50CF8(rzLR;Dwc(@s#+URY`X4_DhJ4)^_(JZ1 z1foA8eCF3JjGAG#4ObOn+t1G_G7WqYoq}wbKZ=?@6Gt5*?^y4Siupr#wz`*e`dGA- z=MCJLqcD99oB=XO*=Qj=nK?aKk0*K(*N*DHFo||%%A0Fvxs^+=5VkbeF6}_s-2sX} zleq!w6FokD3tjzDYZv~==zJXIIlVnD zJv}AeY$%kWXrA&vP(Y$SFSch#l%d)hmDZmwiz@Hnd|{g9WDt>Q_TFIrApQIUw4(xV z2giqDuLYM5aL83MtNELVkB{)bC z$!d1L)N~5;zOQC3Qa~ed)chvZf>4@2K)^WKtoj`5mZ{9f|5)Zp>wYTZmbGR=zpC=} zCL6T02DvLM(-gZM8+B@+HE-a}G( zO0o8-Ho7=9Yer*aNVqe}$pxbe##?D9%;*0hxx})Yd-DKScjAA-25&1t`Sdh(F%iVtgtQ&UCM3PvEV8C-WaLU;R+7jTt--RpyT#jWZWx7Zx6d8gS)$QDo zp_*~jRbgf=8RCL*F#V$nU%cZ&g!s`yD*kILxPmu5z(S`>30ph1Wxmy74{)qMM2R~_ zpX7_GU2LBv`b%~jw*&d5sO0y<5UPs2U)l0{2a@LKptFpFaKH51Gp4nz?kD1+F_iIu zSz4sW&`LD%&*Gf53B9KVb;+Qg)G-P~)5|f^r}Q{~hL@x^{45BNE+q}1Gct90yDb86DmF2M`(_?!ImpV8SEI&2Lt)&Ip`t zu7%Ap*!)g%AcqauBFDrsvRU^7d_I8Sse&vuM8c+@-^om(b zQIS|zQ9Tf8N}YO*^uu+u*%j>TrwyX%WAGqMbQl5eNGS8L0TZk1*W7 zq5>M1HoeoiR!h&iUi=p+0&aEKa^p<;VvxN6hig%f(<%kfhQ8Y$(`&yGWA7&c zs9N%|?K%dS79&y84schDw$9{?K5Kai$GG&x=<4=b31g=a@~6E8af# zxLmYh?P!1{njG!Q0+W#+d7M6yA#?4U~c%})qf>|OjvZPibKfaG^=^y5HBVisrQ5& z4eZ5qivqOrAg_amRk8tgUq4lSanSIGVu7L3)8woChS2aDZ4)VqPH%yN;n|)d-61CO z`+&cI4W5-b`Masw)=QEE64p>Sbl)e@)*){1AAur1znWp+U35*UXl)VqmaJcJd|Zdy z3Z@zCkI|t#X{hR@}LJ7Hy5v^xvP=3>+)BN6Y8Pi!+*>ap`=z_%XFO-Q+E$1cbZ0t_zYL79N~r0 z$<7j7;VRk+>Xsk4G9Sxo3vXJ)eowDroX_pS4BeF)3BMdGpBLgi*OUK353pM#IH*eD zrzMdGxfl;}J(H|rurz}>I%>2O(j-yraRDNTME;T(0c$|$=*$4hh}ynO+_%?%ISeX} zS2eTO1`;y@d%s$Zy`Yx^p|8)X5aDnf#4g#FeaNQP4s~%`dzC(NR@3)R+!E=c-10_j zdT_^UdNLP%znS`zP%7t1=H6diruD%c@_##;d=Ka{Kk5nq6ApJmHgVG2g1~nKSbI_{ zqUe8>m&wBea@-0pRyZ+=4N-Aw{r`~7M#B`wXy~yG|vw7uYcTQ4lHiFv|&6r%~hopyD z<0)lcR?xR1+C1c9Uwz*=GmPME?9>ml>=?1;F(&Cl5|REn5Lifu_hlC<+yDwtImS%W1V|E4T$ z4mUnlWC!fR8vs^CZ@PiCozJi@Lx8vR&fC!&-c&`sw!ReInZ(nhy0}!}D~`#Aq1pJ7 zwN>@&l4qLU8)?UP!t@)b+a~vkltbpVgVo@Pab{C(;i0zkaQi%uz_arddkY2`9Wt|b zqW*^Pvl8%9RXgg|Xo`{7qF=5^uG9@_BaMt644$bS-_dUc$2F21P^Qy-={}6h(#pH7 z^9;WkqvDEpG}oFQgGs9>e7eeR(pd|6PR78%E2y}>t4s_4G!Ga239=!4)_|u1>M)0Thfz6di!{J<{1NFJVds*-{+C*qy`dejujzPaS@YhkS_(w7H+HN$^uC-d~HiIMD`J zc$hx3h)3^z-2iYjfsY%*Ab%ga;t*;Iq9`iXw=Q*!uNAC^ZSwn#;D&n3rJAYb*HQi) zV5)Nx7@_~Rd>f3A_pqNjBv+q$%oR)=n-KSISNZ!fS9BUZ55ejN;F zHadZ3GjwGxQ>i1P#<2rm^-h_TkTgB8h`>f9aC`~G-0g$qt#|u|xv%=pk06q~{&v`9 z=aMEQYV3IEY$w*wJ<-)Zxstb`F<` zKejoP+{|}AtRXei@YwjjK!E3U^BLfEHDKp8t@GvnA23q*nAq@o$gJYqpvocZzT*#M zR`RUr;a0ZaPZGOnOEgB1oLZH>{$~03uU6QBaz`yKuQ;N&UOfQR2SOmwoTT)-fcxVg z({{ld*n@691-5Ry=&zi)dU3oYhHbVtjZ3UnLoPlX2G;p(Dd>G?GUt7QUF+3yDOJqT z{Ja$L?2CHCV`M8N=R-GljCs#|_jblGX}jg#^yanMUV~kCXSL?a{;_w1!Ql94|z77ptH zc;&$E;2JICk!!rD)ab=jaRP+m>3BY<>5DYI5$yE{5K!5I4~5bLFMOkMO*ni+acN1> z!qda6b`*=O-#H00k&@YB@1zPk=CNIAIVZHF<( zwIt`vz*5wOrxL(LCYoUu_DzaGdwbB@LIv_r@dwFlMU3{Rs_I{|KX43^DN<#81`kI{ z6?t9vUY(rdR_HI9^tb~N4|q2C?QK91wzNX+wD*ennhBWNfkc9MILR^gC#1{c!f5u1 zWOA6NHWwA=+jTdpdS(`#4YTpr84;J6lYqY*I-+mbop*QI^1@A+1E0+YfAdu=>Y~14 zWxrwtI&IqExW)Sc%zuRgImYxQ)8>Bw)f~@MPU!vLw`X4(0(i}lVKuoo2_?%r$Y5tu zszKF#6jIhmdg`|g3+jM}BqM+?wv1LOl$I?ArOGP(vH?ixV&^MA1`XQsPOHIc9%!E6 zL>7g5qiZXSx)=S!KH&AO-U#I{(mC?S4E8O(>=vvS^bHo0g&v2`Jcg2x^}oPoB;F^x z_P3+jY2$0%Gdb8Z|C2}mm3-rjze*+|H|^!x*6H~3vXl=L&U zq^jXRcYC&bruVLO=a*eHf@jR{sgH8zs#KdcKO>uy4b6p*rR+xDd!gcyG6MEXbAxFp zFCyYd9Q8{x6ksRSzZ$?(9Zn+*u|1t1ANSIBlR7c5lGCv?)u;^a7yq@ekn<`&j*%|p zEo+m1vU6WDqW=>CBd)OocH53*3HpFQ28A~~%b4*RPqn8JT1uvldX>a(jLW{7CYr}D zJH8JgXBzqT`d{(@>bqYXKVpWjnosM8yR69zJ@bZMZeLIF4Gdew*BkbXBuH1FnF<0G z@8f0al4X(bhJnBrJPmeNgr7dgaeYJJ+~7isBoc7m z!Dqya*K@&m#_t2yH&{lm+b?m)vC_`$h&FQp>n(H^F+la_M6p$tx2FgtAGgWcikEg& z6UUXA+|Ci5Aj;!r9^>ySr&XW{G2H2$0j1LGl)hFSFQ{H+-r-j_ylD7mUj-Qb4dk<$ zX%;|3)3y)PD!r$Sxv03({o>D!Kft;(3xB9vdDV+fMg-rC z*gCu)3=nU;aZ64NkT9aWzzgDb#-clA)o4$kOTR*hO)RI8dLQ}3Spy7a<2^r`>|zK` z$rkprmVqJ_1v*!RV7O`lj3Atob1l<@L7wq@kH|1+i5?t*h6rr>--IsGM0)= z`JaU!{7e50jy~YwozyjtL9zv@Od1hnF)y!-&T;zc;z^t zL=T*v)~Ry_m+VcOhy%0hBDaO_B^O9!YFlxqb2B^bBi$FDdIy*t8F!tme!4~4{2P3s z`>g2WrYEW4k-zAKNPy;NCO^5VtowC0!O;@wtU0mNRaXRgghdYGonLX?t$tL%Xb?Ca z)L_y<`mcVsqqo!~;XpMhft79gD>){8P1^Kl*a@IlRw=#&l~g0gs^b5&LrffJBD(_> z#*$Ko)k_;3JUHX?(gJ28bE#rEK8G6@#6!i9b@1Jo%P7c*)dtb``5!t`7o|03hRn_k z8yT=4(_;sP(n6bHTjee7#W0Z(hp{CQe~16n2O|o7(L7O=>dF-0GD`WTU)<4J^sUtY zgGY=?-_@mL?sk~$VBpv_PI!96PqgtFpReWCB(ZL8*7~U1At>dTp@W$_!Ji>O+R_=lXMg-q|uN5~tH^K{;GI}KC*ZR0u z>zp25(7ki=u=&;L0Xfz&YGT*NEXqy!B);o7TO(^41BU0-m_jz);U# zWLFm3Cz2L_ISi6bV458&h&+vV{1MMd)a4N5w?h+aqZy=)qn5gls0!`m?&iAu_OL#cu}3W6a-by;ReC%*>2O3> ziGa{l8tMZGki|MW!yVk&nT_rAfm& z7Cu$bDPvIS_6eu#PhZ(U92()&b^`kL{?QRiTwj`rgiKlC5$jK|?<|HA^UB~um-&N` zV9-`w_>+OSQV*k#u})Jg)h2TKfr4xSsFOg$uORA@zK=)xhJoTJeFw)p8_eDvEp0r8 z@#?OB67a)#F*uL6m8qIn94b~0&hfkCrf6>5bVJp?+MfCz-z+Qu5wy=2iZEf_X>O0H zb0DB8)o(lm0=%hO@}BsjP+?xyFH|-+?O%ca z;f?#3+%7}!kWOC0 zggPrd%m_Wc5AjomHH>KjOtQ!(gR&-!@fLT_;bI2MOx&OxDoO{q!}Bu1);Y#4xJDRm z%Zb$#*nVWrJvE{nth|Rq+tWaRVbsA?LvX@;HN#$&9{|Vli|!U&l0a4U4Jp zq`vBC3#v+T`96>)+alYL!b*epQOu>G|9yQun^&+OTdlss>?SbI0-S$*M&1xk={4@% zhA7L?r?Ms0qazxO$+3?Yc!?Hdo%b>gji5$X_B;*o!d{b}QFTM=KXRrbpG7%pz4!yX z3IZV?f01&C*v9iqj=x>rrP|VhwgEZIwlla)D+-*2x#8G(m0jTZ%$*jx>mIzk~}6UAkvgQ?g5b(?lw? ztj4r!#Ai%uB8qU+{}T=k@$zmVw@Br}4N$E#9R>HE)nm9mqt_J_=Vsb{;F%i(L{>b` z)!%MB_Z6?;sHz3+R)-z21H&gRx%xEQF#Uk>RYm*!DcZh=cJh5gxhXN1T#%5z$zNY6 zpK8@6#!jIr{wsU+%y;a|zjBN;Jpbp)P=7}$X)Se*t@Bd5tJaBk?yA5K#%~l zXdH?3Fh1ujiNLLseYwMUk1k^hD=oL43sfiB(|Chr9P4Xq%p)Zrme{;zYt<$C)j4SYFqT2=eh|hyyl|ay&X`A_CIO_| z=Ux4P@fD&!SMbnXVU2o)eo{_tTIW;`YtHdEfz!98^18DMr~ravIEBk&{$9Z!NLa#2 z(yDUw{wid}rM|~^g*r>aT|u}ZKhrYjj<>N@7i#VuyrSn>gRLPGUYdBLF zLf0&9N*_T;4(YVm6XMa!LRcnAC0na%! zAB8lYi_zXhF!|fqoCe^ppmi*<_LBAAn5GJBO;2C3L>C&Q4on;YpH-L@?NwWF8gT0|q-(T-Cmv@&9la%eKQV1(r{ID{#w zwi1&mc{+o0plz7WB#awCM;>OAFl|-VUZ!xGv$VK^Mi|%sL9&M7CX4873_c~ZMu)<4h>xTBxBxIQ&8Rnj~;V(2aC5{>j*PuGB5 zyz-oN-%H;_d##stGgkoAOV-`-1odaXWcc!$9CJZ(;qrY&Q1*L4;4>)IjR%Slym2G4 z7u3|R>yK5uAgY@CLxBQl?`FCk{Vi@&V~^U((#x11p98$c5C9EZC*ZIJGgVjE4<)eg zhU!w!Ljsk~_7NKy8L@ZXe1S3iTL@OXCg0W15t6#W4@U4PA49{ovN~;viBZZEtM?Zw z;R#MA0>Dw5n4CfrJA;?;ZmIowjJZAlW*6_)>ualMz}KD0Y&Sxz5wztFgtYfDo^oyt zwrHuoDM6C+`mB`eG;+^$?Vi!^p^Mi{d&>j2*DyU}a&poZ7w5@u8Ec#&r$zh#z}A?e zT$O4D0ERV71R)r6mBz_lb?Ripg%#C66N_oFb_tMKx17l35z38^K8OkS2({AYl-|pBZ#d(M;;nkO z2{2er+sMEp_SX6D+5EyAY#;Ztth+^M$2?m=(~PmOZEbI}PP~c5ogC#E|92H8JE1DFwMHS^s@8p^P zn7c~bn1`RWPWF(Vo&8@dmBDgo*Q|FK;Unv{1p;^Q8m{&7@^szR6QfK!2ubd-9A@T` zRw9EoM8{$l5d+%sxYNjP+s5)HV4iOT>#b!KluZ}xufOq}y*b=!zxOiK9 z-1`Ptb^?H22RvulgFM{ImW~MVw491{PY5sM|D$Y!queKt95iTzk4}NQS-55qeL!^- z{tbxgnv-h?NdW>vXk-i%%mvmWCShFA zDBu{VHNv(tm}yqfBvi>*0JsHCr~-qj{Bt;$(MLFiDP?Ob@u=H68V6}$gaJJ z=0rd!f+?bB06ch>e%hOm>qP+=(sg`>j=YbDVu6>|2+omc!&)^-zH$u2-mctNbO9y* z9_M<^1)c=$$7wT6v(j_Vp@W(=#7olt>fF8W^7hwCSaHRKYI&?P9p+m16m)dpTJh+Q zO2FR(5CE!o5MT@p4r9jM&NG;H(W@RDu;yHKH)&h>C#~W^G`4TP_cUhKpQm3Qa?1eb z=AQzf-;QvhQyBpsW%f)?Zd;;2SE01{$8Dwcw*?R8R8p5*J*wXE_kwaNJ?}_N@#@d^ zCG7+(>Z{xfp{?!hVtr}Py*9V{g2mB}&0KlbPCRs&RJ1l(si|xV>L&t=K23MW5#K$8 zPV^1{-^kE0d$09vo4NiT9-QxWntGQAZ74m9XsGSm2K&ZrcIIt6Jn<+AAo!wBYP?iv z6ZJ#4J{@oo$NaUYy9;3(2#<270bJV9&!zt{ zw!Ai+8qL-(JsjWzjoY_Mn0v7@a`V3Q(NAZsP|IFs3mj7P#a^ z3HVy*kfka>wM3a&8?AAq9^xtJX(Za!0N{RYKJ%5!l;s4>m&weujfU>D3Iexr_Q3w~ zuTI(3tIyk0PkoJkxnsZh`F~2f6HaSYW?j7Yjo;X2R|bSRHRcilHbWR8t-e578(S`A z0FON#cL1CR?Ar7X>C+QV+Z?8yo0y@)K5M`4S})s@A(-37N@rn##XN(6xxR|c zT-%{;9fo`m^79TrR&`h3$p8YiFL(|%SjQdtrJ`R&-I57+FEzVd=S`Gp7Uv7foie*KQm+G9_gujl*u3$OP$sD3J)AW-(_cTPp^zjm)H-mY1 z8X(LgER*oLk3d2|K7`dv8NqTDg3C#nCNT+OTJYIXLF1h0h+6+}H*Jg%1=`0Ta9f-> z%+u)uIa}XkT{qvju6E7gNoN7EN}p`Q0;hjC#`g`M0PTWrjqp(^P{*|UW>uGxCPqyz j!psVKF08EJKAryuk<6$g_TUf|00000NkvXXu0mjfwqBJ5 literal 0 HcmV?d00001 From 80d8aeb7097c54eb320b05cd30a54a36cfee1935 Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Fri, 1 Apr 2022 09:11:40 -0700 Subject: [PATCH 17/29] fix typo(?) [SAM-209] --- docs/adrs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/adrs/index.md b/docs/adrs/index.md index 6e8aa656..603cb69c 100644 --- a/docs/adrs/index.md +++ b/docs/adrs/index.md @@ -1,4 +1,4 @@ -# Architecture Decision Records (ADRs) +# Architectural Decision Records (ADRs) ## Contents From ecae50ceb123c441899d43d3a24aa0c582d5ac93 Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Fri, 1 Apr 2022 09:12:14 -0700 Subject: [PATCH 18/29] add documentation for plantuml [SAM-209] --- docs/documentation/diagrams.md | 37 +++++++++++++++++++++++ docs/images/pycharm-plantuml-plugin.png | Bin 0 -> 25730 bytes docs/images/pycharm-plantuml-toolbar.png | Bin 0 -> 17443 bytes docs/images/vsc-plantuml-plugin.png | Bin 0 -> 72438 bytes 4 files changed, 37 insertions(+) create mode 100644 docs/images/pycharm-plantuml-plugin.png create mode 100644 docs/images/pycharm-plantuml-toolbar.png create mode 100644 docs/images/vsc-plantuml-plugin.png diff --git a/docs/documentation/diagrams.md b/docs/documentation/diagrams.md index e69de29b..a2f32e3a 100644 --- a/docs/documentation/diagrams.md +++ b/docs/documentation/diagrams.md @@ -0,0 +1,37 @@ +# Diagrams + +Diagrams may be created with any tool but [Plant UML](https://plantuml.com) is supported within this project, at least with documentation and examples. + +PlantUML is a command-line based tool which uses text-based specifications for UML and similar diagrams. + +It has support within popular IDEs like Visual Studio code and PyCharm (as well as other JetBrains editors), which provide syntax highlighting, diagram preview, and export to image formats. + +This project currently has an example of [C4 software architecture diagrams](https://c4model.com). This is enabled through a [C4 Plant UML plugin](https://github.com/plantuml-stdlib/C4-PlantUML). + +PlantUML is distributed as a single Java jar file, and thus requires Java be available. It also requires [GraphViz](https://graphviz.org/) for preview and export. + +## Using in PyCharm + +All that is required to use PlantUML in PyCharm is to install the plugin "PlantUML Integration": + +![PyCharm Plant UML Plugin](../images/pycharm-plantuml-plugin.png) + +> This plugin ships with an integrated GraphViz binary, and PyCharm includes an integrated Java runtime; so unlike the VSC plugin, it has no system dependencies. + +This plugin provides the PlantUML binary, syntax highlighting, preview, and export. + +Usage is straightforward. Common operations are found in a toolbar that appears above a PlantUML document while you are editing it: + +![PyCharm PlantUML Toolbar](../images/pycharm-plantuml-toolbar.png) + +The plugin may be configured via PyCharm preferences: **Languages and Frameworks** > **PlantUML**. + + +### Using in Visual Studio Code + +Visual Studio Code also has a fine plugin which enables syntax highlighting, preview, and export. + +![VSC Plant UML Plugin](../images/vsc-plantuml-plugin.png) + +Requirements for this plugin are described in the plugin's description. Generally it requires Java and GraphViz be available. + diff --git a/docs/images/pycharm-plantuml-plugin.png b/docs/images/pycharm-plantuml-plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..5372e09cda64edf1f622050e1f120ccf41294f77 GIT binary patch literal 25730 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 literal 0 HcmV?d00001 diff --git a/docs/images/vsc-plantuml-plugin.png b/docs/images/vsc-plantuml-plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..892b2b1187067320fe603adb4b5d39276aa20d1a GIT binary patch literal 72438 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 iw_4z0C5U0CKBxCh&bW^N literal 0 HcmV?d00001 From fd8633af33e21ffb6e56c96168642dc36e7d363d Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Fri, 1 Apr 2022 09:12:39 -0700 Subject: [PATCH 19/29] add content to readme security section [SAM-209] --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 940a6126..0abc937c 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,11 @@ # Sample Service -Build status (master): [![tests](https://github.com/kbase/sample_service/actions/workflows/non_sdk_test.yml/badge.svg)](https://github.com/kbase/sample_service/actions/workflows/non_sdk_test.yml) [![Coverage Status](https://coveralls.io/repos/github/kbase/sample_service/badge.svg?branch=master)](https://coveralls.io/github/kbase/sample_service?branch=master) [![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/kbase/sample_service.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/kbase/sample_service/context:python) [![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme) -The Sample Service is a KBase "core service" which supports storage and retrieval of experimental sample data. It supports validation, access control, versioning, and linking to KBase data objects. +The Sample Service is a KBase "core service" which supports storage and retrieval of experimental sample metadata. It supports validation, access control, versioning, and linking of samples to KBase data objects. ## Table of Contents @@ -22,7 +21,9 @@ The Sample Service is a KBase "core service" which supports storage and retrieva ## Security -> TODO +- Private samples require a KBase auth token be provided in the API; public samples do not require an auth token. +- Must operate over https or within an isolated environment, as it receives and sends auth tokens. If operated over https within a protected environment, the proxy to it must provide only https access to the API endpoint. +- All upstream services (ArangoDB, Kafka, KBase Workspace, KBase auth) must be similarly protected ## Background From 50bae88e6c38f6f7f9d915bf00692326eb3e6376 Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Fri, 1 Apr 2022 10:29:58 -0700 Subject: [PATCH 20/29] consolidate to one sample puml file [SAM-209] --- .gitignore | 1 + {docs/diagrams => _temp}/system-context.puml | 0 _temp/system-overview.puml | 30 ++++++++ docs/design/index.md | 3 + .../images/sample_system_overview.png | Bin 0 -> 39577 bytes docs/diagrams/sample-system-overview.puml | 65 ++++++++++++++++++ docs/diagrams/system-overview.puml | 59 ---------------- 7 files changed, 99 insertions(+), 59 deletions(-) rename {docs/diagrams => _temp}/system-context.puml (100%) create mode 100644 _temp/system-overview.puml create mode 100644 docs/design/index.md create mode 100644 docs/diagrams/images/sample_system_overview.png create mode 100644 docs/diagrams/sample-system-overview.puml delete mode 100644 docs/diagrams/system-overview.puml diff --git a/.gitignore b/.gitignore index e339726c..33939212 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ deploy.cfg .coverage test/test_temp/ lib/SampleService/SampleServiceImpl.py.bak* +_temp \ No newline at end of file diff --git a/docs/diagrams/system-context.puml b/_temp/system-context.puml similarity index 100% rename from docs/diagrams/system-context.puml rename to _temp/system-context.puml diff --git a/_temp/system-overview.puml b/_temp/system-overview.puml new file mode 100644 index 00000000..2a2c748c --- /dev/null +++ b/_temp/system-overview.puml @@ -0,0 +1,30 @@ +@startuml sample-system-overview + +!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml + +title +Sample Service +with service dependencies +end title + +AddRelTag("uploads", $lineColor="orange") +AddRelTag("calls", $lineColor="green") + +System_Boundary(kbase_environment, "KBase Environment") { + Container(sampleService, "Sample Service", "JSON-RPC/1.1") + ContainerDb(arangoDb, "Arango DB", "REST") + ContainerQueue(kafka, "Kafka", "REST", "event streaming") + Container(zookeeper, "Zookeeper", "?", "configuration ") + Container(workspace, "Workspace", "JSON-RPC/1.1") + Container(auth, "Auth Service", "REST", "authentication") +} + + +' Relations for calls +Rel(sampleService, arangoDb, "calls", $tags="calls") +Rel(sampleService, kafka, "calls", $tags="calls") +Rel(kafka, zookeeper, "calls", $tags="calls") +Rel(sampleService, workspace, "calls",$tags="calls") +Rel(sampleService, auth, "calls", $tags="calls") + +@enduml \ No newline at end of file diff --git a/docs/design/index.md b/docs/design/index.md new file mode 100644 index 00000000..de5595a8 --- /dev/null +++ b/docs/design/index.md @@ -0,0 +1,3 @@ +# Design + +![Sample Service Overview](./../diagrams/images/sample_system_overview.png) \ No newline at end of file diff --git a/docs/diagrams/images/sample_system_overview.png b/docs/diagrams/images/sample_system_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..aa39f870d91addc4e6d4bf4461cc8fe37f616183 GIT binary patch literal 39577 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 G*Zu^!z`b1n literal 0 HcmV?d00001 diff --git a/docs/diagrams/sample-system-overview.puml b/docs/diagrams/sample-system-overview.puml new file mode 100644 index 00000000..408c1a1c --- /dev/null +++ b/docs/diagrams/sample-system-overview.puml @@ -0,0 +1,65 @@ +@startuml system-overview + +!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml + +AddRelTag("uploads", $lineColor="orange") +AddRelTag("calls", $lineColor="green") + +System_Boundary(userland, "Userland") { + Person(user, "KBase User") +} + +System_Boundary(browser, "Web Browser") { + Container(narrative, "Narrative") + Container(kbaseui, "KBase UI") +} + +System_Boundary(hostComputer, "User's Computer") { + Container(samples, "Raw Samples") +} + +System_Boundary(kbase_environment, "KBase Environment") { + Container(sampleService, "Sample Service", "JSON-RPC/1.1") + ContainerDb(arangoDb, "Arango DB", "REST") + ContainerQueue(kafka, "Kafka", "?", "event streaming") + Container(zookeeper, "Zookeeper", "?", "configuration ") + Container(workspace, "Workspace", "JSON-RPC/1.1") + Container(auth, "Auth Service", "REST", "authentication") + Container(importApp, "Import App", "KBase App", "imports samples") + Container(stagingService, "Staging Service", "", "raw sample files") + Container(narrativeBackend, "Narrative (backend)") +} + +' Relations for user +Rel(user, narrative, "uses") +Rel(user, kbaseui, "uses") + +' Samples and importing +Rel(user, samples, "creates, edits") +Rel(samples, narrative , "uploads", $tags="uploads") +Rel(narrative, stagingService, "uploads", $tags="uploads") +Rel(narrative, narrativeBackend, "comm") + +' Relations for browser apps +Rel(narrative, sampleService, "calls", $tags="calls") +Rel(narrative, workspace, "calls", $tags="calls") +Rel(narrativeBackend, importApp, "runs") + +Rel(kbaseui, sampleService, "calls",$tags="calls") +Rel(kbaseui, workspace, "calls", $tags="calls") + + +' Relations for calls +Rel(sampleService, arangoDb, "calls", $tags="calls") +Rel(sampleService, kafka, "calls", $tags="calls") +Rel(kafka, zookeeper, "calls", $tags="calls") +Rel(sampleService, workspace, "calls",$tags="calls") +Rel(sampleService, auth, "calls", $tags="calls") +Rel(importApp, sampleService, "calls", $tags="calls") +Rel(importApp, stagingService, "accesses", "sample files") +Rel(importApp, workspace, "calls", "creates sample set") + + + + +@enduml \ No newline at end of file diff --git a/docs/diagrams/system-overview.puml b/docs/diagrams/system-overview.puml deleted file mode 100644 index 3c905e76..00000000 --- a/docs/diagrams/system-overview.puml +++ /dev/null @@ -1,59 +0,0 @@ -@startuml system-overview - -!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml - -System_Boundary(userland, "Userland") { - Person(user, "KBase User") -} - -System_Boundary(browser, "Web Browser") { - Container(narrative, "Narrative") - Container(kbaseui, "KBase UI") -} - -System_Boundary(hostComputer, "User's Computer") { - Container(samples, "Raw Samples") -} - -System_Boundary(kbase_environment, "KBase Environment") { - Container(sampleService, "Sample Service", "The Sample Service") - ContainerDb(arangoDb, "Arango DB", "database") - ContainerQueue(kafka, "Kafka", "event streaming") - Container(zookeeper, "Zookeeper", "configuration ") - Container(workspace, "Workspace", "Narratives, SampleSets") - Container(auth, "Auth Service", "authentication") - Container(importApp, "Import App", "import samples") - Container(stagingService, "Staging Service", "contains raw samples") -} - -' Relations for user -Rel(user, narrative, "uses") -Rel(user, kbaseui, "uses") - -' Samples and importing -Rel(user, samples, "creates, edits") -Rel(narrative, samples , "uploads") -Rel(narrative, stagingService, "uploadeds") - -' Relations for browser apps -Rel(narrative, sampleService, "calls") -Rel(narrative, workspace, "calls") -Rel(narrative, importApp, "calls") - -Rel(kbaseui, sampleService, "calls") -Rel(kbaseui, workspace, "calls") - - -' Relations for calls -Rel(sampleService, arangoDb, "calls", "net") -Rel(sampleService, kafka, "calls", "net") -Rel(kafka, zookeeper, "calls", "net") -Rel(sampleService, workspace, "calls", "net, JSON-RPC 1.1") -Rel(sampleService, auth, "calls", "net, REST") -Rel(importApp, sampleService, "calls") - - - - - -@enduml \ No newline at end of file From 72226cc433ee11447d315103d3d33d6b2803d753 Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Wed, 6 Apr 2022 09:55:54 -0700 Subject: [PATCH 21/29] remove _temp directory [SAM-209] --- _temp/system-context.puml | 53 -------------------------------------- _temp/system-overview.puml | 30 --------------------- 2 files changed, 83 deletions(-) delete mode 100644 _temp/system-context.puml delete mode 100644 _temp/system-overview.puml diff --git a/_temp/system-context.puml b/_temp/system-context.puml deleted file mode 100644 index 765125b6..00000000 --- a/_temp/system-context.puml +++ /dev/null @@ -1,53 +0,0 @@ -@startuml system-context -!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml - - - -System_Boundary(hostComputer, "User's Computer") { - Container(samples, "Raw Samples") - Container(browser, "Web Browser") -} - -System_Boundary(kbase_environment, "KBase Environment") { - Container(sampleService, "Sample Service", "The Sample Service") - ContainerDb(arangoDb, "Arango DB", "database") - ContainerQueue(kafka, "Kafka", "event streaming") - Container(zookeeper, "Zookeeper", "configuration ") - Container(workspace, "Workspace", "Narratives, SampleSets") - Container(auth, "Auth Service", "authentication") - Container(importApp, "Import App", "import samples") - Container(stagingService, "Staging Service", "contains raw samples") - Container(relationEngine, "Relation Engine", "shadow objects") -} - -System_Boundary(github, "GitHub") { - Container(sampleSpecs, "Sample Specs") -} - - -Rel(browser, samples , "accesses") -Rel(browser, stagingService, "uploads samples") -Rel(importApp, stagingService, "accesses files") - -' Relations for browser apps -Rel(browser, importApp, "calls") -Rel(browser, sampleService, "calls") -Rel(browser, workspace, "calls") - - -' Relations for calls -Rel(sampleService, arangoDb, "calls", "net") -Rel(sampleService, kafka, "calls", "net") -Rel(kafka, zookeeper, "calls", "net") -Rel(sampleService, workspace, "calls", "net, JSON-RPC 1.1") -Rel(sampleService, auth, "calls", "net, REST") -Rel(importApp, sampleService, "calls") -Rel(relationEngine, arangoDb, "calls", "net") - -' Relations for GitHub Access -Rel(sampleService, sampleSpecs, "accesses") -Rel(importApp, sampleSpecs, "accesses") - - - -@enduml \ No newline at end of file diff --git a/_temp/system-overview.puml b/_temp/system-overview.puml deleted file mode 100644 index 2a2c748c..00000000 --- a/_temp/system-overview.puml +++ /dev/null @@ -1,30 +0,0 @@ -@startuml sample-system-overview - -!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml - -title -Sample Service -with service dependencies -end title - -AddRelTag("uploads", $lineColor="orange") -AddRelTag("calls", $lineColor="green") - -System_Boundary(kbase_environment, "KBase Environment") { - Container(sampleService, "Sample Service", "JSON-RPC/1.1") - ContainerDb(arangoDb, "Arango DB", "REST") - ContainerQueue(kafka, "Kafka", "REST", "event streaming") - Container(zookeeper, "Zookeeper", "?", "configuration ") - Container(workspace, "Workspace", "JSON-RPC/1.1") - Container(auth, "Auth Service", "REST", "authentication") -} - - -' Relations for calls -Rel(sampleService, arangoDb, "calls", $tags="calls") -Rel(sampleService, kafka, "calls", $tags="calls") -Rel(kafka, zookeeper, "calls", $tags="calls") -Rel(sampleService, workspace, "calls",$tags="calls") -Rel(sampleService, auth, "calls", $tags="calls") - -@enduml \ No newline at end of file From fbe6297dd7dc4c990800d2936d7f40acb5511b0b Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Wed, 6 Apr 2022 09:56:21 -0700 Subject: [PATCH 22/29] ignore _temp directory [SAM-209] --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 33939212..a40ea727 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,4 @@ deploy.cfg .coverage test/test_temp/ lib/SampleService/SampleServiceImpl.py.bak* -_temp \ No newline at end of file +_temp From 9c840664de3c7f78d88d6db0397ba662373494ec Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Wed, 6 Apr 2022 14:07:11 -0700 Subject: [PATCH 23/29] remove diagramming example and support documentation [SAM-209] --- docs/design/index.md | 10 ++- .../images/sample_system_overview.png | Bin 39577 -> 0 bytes docs/diagrams/sample-system-overview.puml | 65 ------------------ docs/documentation/diagrams.md | 37 ---------- 4 files changed, 9 insertions(+), 103 deletions(-) delete mode 100644 docs/diagrams/images/sample_system_overview.png delete mode 100644 docs/diagrams/sample-system-overview.puml delete mode 100644 docs/documentation/diagrams.md diff --git a/docs/design/index.md b/docs/design/index.md index de5595a8..e8352d3e 100644 --- a/docs/design/index.md +++ b/docs/design/index.md @@ -1,3 +1,11 @@ # Design -![Sample Service Overview](./../diagrams/images/sample_system_overview.png) \ No newline at end of file +> This is just a collection of design documents discovered in the codebase. + +- [Built-In Validators](./built-in-validators.md) +- [Errors](./errors.md) +- [Implementation Notes](./implementation_notes.md) +- [Kafka](./kafka.md) +- [Linking Workspace Data to Samples](./link_ws_data_to_sample.md) +- [Linking Workspace Data to Samples in RE](./link_ws_data_to_sample_in_RE.md) +- [Validation](./validation.md) \ No newline at end of file diff --git a/docs/diagrams/images/sample_system_overview.png b/docs/diagrams/images/sample_system_overview.png deleted file mode 100644 index aa39f870d91addc4e6d4bf4461cc8fe37f616183..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39577 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 G*Zu^!z`b1n diff --git a/docs/diagrams/sample-system-overview.puml b/docs/diagrams/sample-system-overview.puml deleted file mode 100644 index 408c1a1c..00000000 --- a/docs/diagrams/sample-system-overview.puml +++ /dev/null @@ -1,65 +0,0 @@ -@startuml system-overview - -!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml - -AddRelTag("uploads", $lineColor="orange") -AddRelTag("calls", $lineColor="green") - -System_Boundary(userland, "Userland") { - Person(user, "KBase User") -} - -System_Boundary(browser, "Web Browser") { - Container(narrative, "Narrative") - Container(kbaseui, "KBase UI") -} - -System_Boundary(hostComputer, "User's Computer") { - Container(samples, "Raw Samples") -} - -System_Boundary(kbase_environment, "KBase Environment") { - Container(sampleService, "Sample Service", "JSON-RPC/1.1") - ContainerDb(arangoDb, "Arango DB", "REST") - ContainerQueue(kafka, "Kafka", "?", "event streaming") - Container(zookeeper, "Zookeeper", "?", "configuration ") - Container(workspace, "Workspace", "JSON-RPC/1.1") - Container(auth, "Auth Service", "REST", "authentication") - Container(importApp, "Import App", "KBase App", "imports samples") - Container(stagingService, "Staging Service", "", "raw sample files") - Container(narrativeBackend, "Narrative (backend)") -} - -' Relations for user -Rel(user, narrative, "uses") -Rel(user, kbaseui, "uses") - -' Samples and importing -Rel(user, samples, "creates, edits") -Rel(samples, narrative , "uploads", $tags="uploads") -Rel(narrative, stagingService, "uploads", $tags="uploads") -Rel(narrative, narrativeBackend, "comm") - -' Relations for browser apps -Rel(narrative, sampleService, "calls", $tags="calls") -Rel(narrative, workspace, "calls", $tags="calls") -Rel(narrativeBackend, importApp, "runs") - -Rel(kbaseui, sampleService, "calls",$tags="calls") -Rel(kbaseui, workspace, "calls", $tags="calls") - - -' Relations for calls -Rel(sampleService, arangoDb, "calls", $tags="calls") -Rel(sampleService, kafka, "calls", $tags="calls") -Rel(kafka, zookeeper, "calls", $tags="calls") -Rel(sampleService, workspace, "calls",$tags="calls") -Rel(sampleService, auth, "calls", $tags="calls") -Rel(importApp, sampleService, "calls", $tags="calls") -Rel(importApp, stagingService, "accesses", "sample files") -Rel(importApp, workspace, "calls", "creates sample set") - - - - -@enduml \ No newline at end of file diff --git a/docs/documentation/diagrams.md b/docs/documentation/diagrams.md deleted file mode 100644 index a2f32e3a..00000000 --- a/docs/documentation/diagrams.md +++ /dev/null @@ -1,37 +0,0 @@ -# Diagrams - -Diagrams may be created with any tool but [Plant UML](https://plantuml.com) is supported within this project, at least with documentation and examples. - -PlantUML is a command-line based tool which uses text-based specifications for UML and similar diagrams. - -It has support within popular IDEs like Visual Studio code and PyCharm (as well as other JetBrains editors), which provide syntax highlighting, diagram preview, and export to image formats. - -This project currently has an example of [C4 software architecture diagrams](https://c4model.com). This is enabled through a [C4 Plant UML plugin](https://github.com/plantuml-stdlib/C4-PlantUML). - -PlantUML is distributed as a single Java jar file, and thus requires Java be available. It also requires [GraphViz](https://graphviz.org/) for preview and export. - -## Using in PyCharm - -All that is required to use PlantUML in PyCharm is to install the plugin "PlantUML Integration": - -![PyCharm Plant UML Plugin](../images/pycharm-plantuml-plugin.png) - -> This plugin ships with an integrated GraphViz binary, and PyCharm includes an integrated Java runtime; so unlike the VSC plugin, it has no system dependencies. - -This plugin provides the PlantUML binary, syntax highlighting, preview, and export. - -Usage is straightforward. Common operations are found in a toolbar that appears above a PlantUML document while you are editing it: - -![PyCharm PlantUML Toolbar](../images/pycharm-plantuml-toolbar.png) - -The plugin may be configured via PyCharm preferences: **Languages and Frameworks** > **PlantUML**. - - -### Using in Visual Studio Code - -Visual Studio Code also has a fine plugin which enables syntax highlighting, preview, and export. - -![VSC Plant UML Plugin](../images/vsc-plantuml-plugin.png) - -Requirements for this plugin are described in the plugin's description. Generally it requires Java and GraphViz be available. - From 12ab07b4158341a53746c08bc8714d0385176eda Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Wed, 6 Apr 2022 16:55:54 -0700 Subject: [PATCH 24/29] scrub more references to PlantUML [SAM-209] --- docs/documentation/index.md | 8 +------- docs/index.md | 3 +-- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/docs/documentation/index.md b/docs/documentation/index.md index 4b8d78c4..3f9b7a2a 100644 --- a/docs/documentation/index.md +++ b/docs/documentation/index.md @@ -14,15 +14,9 @@ All documentation is contained in the following locations: All text other than the license is written in [markdown](https://daringfireball.net/projects/markdown/), specifically [GitHub Flavored Markdown](https://github.github.com/gfm/). -Diagrams are in [Plant UML](https://plantuml.com) format, which are exported and embedded as `.png` files. - ## Editing -It is recommended to edit documentation with a markdown editor which provides syntax highlighting and live preview. This may be an external editor, such as [Mark Text](https://marktext.app), or a coding IDE which provides such support. - -One successful platform is [Visual Studio Code](https://code.visualstudio.com), which provides support for both Markdown and PlantUML via plugins, as well as top-notch coding Python support. - -Another excellent IDE is [PyCharm](https://www.jetbrains.com/pycharm/) which similarly provides full support for both Markdown and PlantUML via plugins. +It is recommended to edit documentation with a markdown editor which provides syntax highlighting and live preview. This may be an external editor, such as [Mark Text](https://marktext.app), or a coding IDE which provides such support, such as [Visual Studio Code](https://code.visualstudio.com) or [PyCharm](https://www.jetbrains.com/pycharm/). ## Structure diff --git a/docs/index.md b/docs/index.md index 493f3e19..1be2c935 100644 --- a/docs/index.md +++ b/docs/index.md @@ -12,8 +12,7 @@ - [Using Pipenv](./development/using-pipenv.md) - Documentation - [Overview](./documentation/index.md) - - [Diagramming with PlantUML](./documentation/diagrams.md) - - [the README](./documentation/readme.md) + - [the README](./documentation/readme.md) - [the RELEASE NOTES](./documentation/release-notes.md) - Design and Operation - [API Errors](./design/errors.md) From 62f30584284d00695a5210c00255234b5c514a02 Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Wed, 6 Apr 2022 17:09:39 -0700 Subject: [PATCH 25/29] remove PlantUML documentation images [SAM-209] --- docs/images/pycharm-plantuml-plugin.png | Bin 25730 -> 0 bytes docs/images/pycharm-plantuml-toolbar.png | Bin 17443 -> 0 bytes docs/images/vsc-plantuml-plugin.png | Bin 72438 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/images/pycharm-plantuml-plugin.png delete mode 100644 docs/images/pycharm-plantuml-toolbar.png delete mode 100644 docs/images/vsc-plantuml-plugin.png diff --git a/docs/images/pycharm-plantuml-plugin.png b/docs/images/pycharm-plantuml-plugin.png deleted file mode 100644 index 5372e09cda64edf1f622050e1f120ccf41294f77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25730 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 diff --git a/docs/images/vsc-plantuml-plugin.png b/docs/images/vsc-plantuml-plugin.png deleted file mode 100644 index 892b2b1187067320fe603adb4b5d39276aa20d1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72438 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 iw_4z0C5U0CKBxCh&bW^N From a66d93c1f9e9047e69f805258435ef4cde986c3a Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Wed, 13 Apr 2022 10:00:09 -0700 Subject: [PATCH 26/29] update GHA table of contents entry [SAM-209] --- docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index 1be2c935..1a2420a5 100644 --- a/docs/index.md +++ b/docs/index.md @@ -23,6 +23,6 @@ - [Sample Service / Relation Engine data linking](./design/link_ws_data_to_sample_in_RE.md) - [Linking workspace data to samples](./design/link_ws_data_to_sample.md) - [Deployment](./deployment/index.md) -- [GitHub Action Workflow](./github-action-workflow.md) +- [GitHub Action Workflow](./gha/index.md) - [Architecture Decision Records](./adrs/index.md) - [TODO](./TODO.md) \ No newline at end of file From 9d4ac34526e2df5052de73b638f8a13c1a3dad9c Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 14 Apr 2022 07:51:18 -0700 Subject: [PATCH 27/29] add a bit more meat to the release notes documentation page placeholder [SAM-209] --- docs/documentation/release-notes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/documentation/release-notes.md b/docs/documentation/release-notes.md index e69de29b..195f1ac0 100644 --- a/docs/documentation/release-notes.md +++ b/docs/documentation/release-notes.md @@ -0,0 +1,3 @@ +# Release Notes + +> Please document the release notes process here; e.g. what standard the project uses, a reminder to include the JIRA ticket number, etc. \ No newline at end of file From 25171b8b036e543a76f9d798763afea4e396b128 Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 14 Apr 2022 07:56:00 -0700 Subject: [PATCH 28/29] clarify that this is a TODO: [SAM-209] --- docs/documentation/release-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/documentation/release-notes.md b/docs/documentation/release-notes.md index 195f1ac0..7576fda9 100644 --- a/docs/documentation/release-notes.md +++ b/docs/documentation/release-notes.md @@ -1,3 +1,3 @@ # Release Notes -> Please document the release notes process here; e.g. what standard the project uses, a reminder to include the JIRA ticket number, etc. \ No newline at end of file +> TODO: Please document the release notes process here; e.g. what standard the project uses, a reminder to include the JIRA ticket number, etc. \ No newline at end of file From d8e18bb5dbe699257600c009421d6d9492abbade Mon Sep 17 00:00:00 2001 From: Erik Pearson Date: Thu, 14 Apr 2022 07:58:20 -0700 Subject: [PATCH 29/29] add release note [SAM-209] --- RELEASE_NOTES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index a74cdbc1..2c728b7e 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -2,6 +2,7 @@ ## Unreleased +* organize documentation under a single `docs` directory; add some additional documentation and placeholders [SAM-209] ## 0.2.1