From 66daab3baf2a6765bb548c95513a7d6dd55bda32 Mon Sep 17 00:00:00 2001 From: Marek Wolan Date: Tue, 21 Jan 2025 13:08:36 +0000 Subject: [PATCH] Backport 3.3.1 fixes into Core --- .azure/azure-ci-build-pipeline.yaml | 42 ++++--- .pre-commit-config.yaml | 2 +- docs/source/primaite-dependencies.rst | 82 ++++++------ pyproject.toml | 16 +-- .../_package_data/data_manipulation.yaml | 4 +- .../_package_data/data_manipulation_marl.yaml | 8 +- src/primaite/game/agent/agent_log.py | 2 +- .../agent/observations/acl_observation.py | 12 +- .../observations/file_system_observations.py | 7 +- .../observations/firewall_observation.py | 118 ++++++++++-------- .../agent/observations/host_observations.py | 44 ++++--- .../agent/observations/node_observations.py | 2 +- .../agent/observations/router_observation.py | 35 ++++-- src/primaite/game/game.py | 22 ++++ src/primaite/notebooks/Action-masking.ipynb | 9 ++ ...a-Manipulation-Customising-Red-Agent.ipynb | 9 ++ .../Data-Manipulation-E2E-Demonstration.ipynb | 9 ++ .../Getting-Information-Out-Of-PrimAITE.ipynb | 9 ++ ...ge-Escalation-and-Data-Loss-Example.ipynb} | 0 .../notebooks/Requests-and-Responses.ipynb | 9 ++ .../notebooks/Terminal-Processing.ipynb | 9 ++ .../Training-an-RLLIB-MARL-System.ipynb | 11 +- .../notebooks/Training-an-RLLib-Agent.ipynb | 9 ++ .../notebooks/Training-an-SB3-Agent.ipynb | 9 ++ .../notebooks/_package_data/uc2_attack.png | Bin 112286 -> 112279 bytes .../notebooks/_package_data/uc2_network.png | Bin 70887 -> 70945 bytes src/primaite/notebooks/multi-processing.ipynb | 9 ++ .../simulator/file_system/file_system.py | 10 ++ .../file_system/file_system_item_abc.py | 5 +- src/primaite/simulator/file_system/folder.py | 17 ++- .../system/services/ftp/ftp_client.py | 5 + .../system/services/ftp/ftp_service.py | 24 +++- tests/assets/configs/action_penalty.yaml | 4 +- .../assets/configs/bad_primaite_session.yaml | 4 +- .../configs/basic_switched_network.yaml | 4 +- tests/assets/configs/data_manipulation.yaml | 4 +- .../configs/eval_only_primaite_session.yaml | 4 +- tests/assets/configs/extended_config.yaml | 4 +- .../configs/firewall_actions_network.yaml | 4 +- .../configs/fixing_duration_one_item.yaml | 4 +- tests/assets/configs/multi_agent_session.yaml | 8 +- tests/assets/configs/shared_rewards.yaml | 4 +- .../configs/software_fixing_duration.yaml | 4 +- .../configs/test_application_install.yaml | 4 +- .../assets/configs/test_primaite_session.yaml | 4 +- .../actions/test_file_request_permission.py | 2 +- .../actions/test_folder_request_permission.py | 4 +- .../test_file_system_observations.py | 8 +- .../game_layer/test_actions.py | 2 +- .../game_layer/test_observations.py | 7 +- .../system/test_database_on_node.py | 4 +- .../_game/_agent/test_observations.py | 14 ++- .../_simulator/_file_system/test_file.py | 4 +- .../_file_system/test_file_actions.py | 4 +- .../_simulator/_file_system/test_folder.py | 18 +-- .../_file_system/test_folder_actions.py | 12 +- .../_network/_hardware/test_node_actions.py | 4 +- 57 files changed, 441 insertions(+), 247 deletions(-) rename src/primaite/notebooks/{Privilege-Escalation-and Data-Loss-Example.ipynb => Privilege-Escalation-and-Data-Loss-Example.ipynb} (100%) diff --git a/.azure/azure-ci-build-pipeline.yaml b/.azure/azure-ci-build-pipeline.yaml index 2375a391..624c9ca4 100644 --- a/.azure/azure-ci-build-pipeline.yaml +++ b/.azure/azure-ci-build-pipeline.yaml @@ -14,31 +14,36 @@ parameters: - name: matrix type: object default: - # - job_name: 'UbuntuPython38' - # py: '3.8' - # img: 'ubuntu-latest' - # every_time: false - # publish_coverage: false - - job_name: 'UbuntuPython311' - py: '3.11' + - job_name: 'UbuntuPython39' + py: '3.9' + img: 'ubuntu-latest' + every_time: false + publish_coverage: false + - job_name: 'UbuntuPython310' + py: '3.10' img: 'ubuntu-latest' every_time: true publish_coverage: true - # - job_name: 'WindowsPython38' - # py: '3.8' - # img: 'windows-latest' - # every_time: false - # publish_coverage: false + - job_name: 'UbuntuPython311' + py: '3.11' + img: 'ubuntu-latest' + every_time: false + publish_coverage: false + - job_name: 'WindowsPython39' + py: '3.9' + img: 'windows-latest' + every_time: false + publish_coverage: false - job_name: 'WindowsPython311' py: '3.11' img: 'windows-latest' every_time: false publish_coverage: false - # - job_name: 'MacOSPython38' - # py: '3.8' - # img: 'macOS-latest' - # every_time: false - # publish_coverage: false + - job_name: 'MacOSPython39' + py: '3.9' + img: 'macOS-latest' + every_time: false + publish_coverage: false - job_name: 'MacOSPython311' py: '3.11' img: 'macOS-latest' @@ -63,7 +68,7 @@ stages: displayName: 'Use Python ${{ item.py }}' - script: | - python -m pip install pre-commit + python -m pip install pre-commit>=6.1 pre-commit install pre-commit run --all-files displayName: 'Run pre-commits' @@ -71,7 +76,6 @@ stages: - script: | python -m pip install --upgrade pip==23.0.1 pip install wheel==0.38.4 --upgrade - pip install setuptools==66 --upgrade pip install build==0.10.0 pip install pytest-azurepipelines displayName: 'Install build dependencies' diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index df3bb504..d004dd6c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -31,7 +31,7 @@ repos: - id: isort args: [ "--profile", "black" ] - repo: http://github.com/PyCQA/flake8 - rev: 6.0.0 + rev: 6.1.0 hooks: - id: flake8 additional_dependencies: diff --git a/docs/source/primaite-dependencies.rst b/docs/source/primaite-dependencies.rst index 14a96349..ce2087ca 100644 --- a/docs/source/primaite-dependencies.rst +++ b/docs/source/primaite-dependencies.rst @@ -2,44 +2,44 @@ © Crown-owned copyright 2025, Defence Science and Technology Laboratory UK -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| Name | Version | License | Description | URL | -+===================+=========+====================================+=======================================================================================================+====================================================================+ -| gymnasium | 0.28.1 | MIT License | A standard API for reinforcement learning and a diverse set of reference environments (formerly Gym). | https://farama.org | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| ipywidgets | 8.1.5 | BSD License | Jupyter interactive widgets | http://jupyter.org | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| jupyterlab | 3.6.1 | BSD License | JupyterLab computational environment | https://jupyter.org | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| kaleido | 0.2.1 | MIT | Static image export for web-based visualization libraries with zero dependencies | https://github.com/plotly/Kaleido | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| matplotlib | 3.7.1 | Python Software Foundation License | Python plotting package | https://matplotlib.org | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| networkx | 3.1 | BSD License | Python package for creating and manipulating graphs and networks | https://networkx.org/ | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| numpy | 1.23.5 | BSD License | NumPy is the fundamental package for array computing with Python. | https://www.numpy.org | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| platformdirs | 3.5.1 | MIT License | A small Python package for determining appropriate platform-specific dirs, e.g. a "user data dir". | https://github.com/platformdirs/platformdirs | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| plotly | 5.15.0 | MIT License | An open-source, interactive data visualization library for Python | https://plotly.com/python/ | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| polars | 0.20.30 | MIT License | Blazingly fast DataFrame library | https://www.pola.rs/ | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| prettytable | 3.8.0 | BSD License (BSD (3 clause)) | A simple Python library for easily displaying tabular data in a visually appealing ASCII table format | https://github.com/jazzband/prettytable | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| pydantic | 2.7.0 | MIT License | Data validation using Python type hints | https://github.com/pydantic/pydantic | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| PyYAML | 6.0 | MIT License | YAML parser and emitter for Python | https://pyyaml.org/ | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| ray | 2.32.0 | Apache 2.0 | Ray provides a simple, universal API for building distributed applications. | https://github.com/ray-project/ray | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| stable-baselines3 | 2.1.0 | MIT | Pytorch version of Stable Baselines, implementations of reinforcement learning algorithms. | https://github.com/DLR-RM/stable-baselines3 | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| tensorflow | 2.12.0 | Apache Software License | TensorFlow is an open source machine learning framework for everyone. | https://www.tensorflow.org/ | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| typer | 0.9.0 | MIT License | Typer, build great CLIs. Easy to code. Based on Python type hints. | https://github.com/tiangolo/typer | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| Deepdiff | 8.0.1 | MIT License | Deep difference of dictionaries, iterables, strings, and any other object objects. | https://github.com/seperman/deepdiff | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ -| sb3_contrib | 2.1.0 | MIT License | Contrib package for Stable-Baselines3 - Experimental reinforcement learning (RL) code (Action Masking)| https://github.com/Stable-Baselines-Team/stable-baselines3-contrib | -+-------------------+---------+------------------------------------+-------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------+ ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| Name | Supported Version | Built Version | License | Description | URL | ++===================+=====================+===============+======================================+========================================================================================================+=====================================================================+ +| gymnasium | 0.28.1 | 0.28.1 | MIT License | A standard API for reinforcement learning and a diverse set of reference environments (formerly Gym). | https://farama.org | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| ipywidgets | ~=8.0 | 8.1.5 | BSD License | Jupyter interactive widgets | http://jupyter.org | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| jupyterlab | 3.6.1 | 3.6.1 | BSD License | JupyterLab computational environment | https://jupyter.org | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| kaleido | ==0.2.1 | 0.2.1 | MIT | Static image export for web-based visualization libraries with zero dependencies | https://github.com/plotly/Kaleido | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| matplotlib | >=3.7.1 | 3.7.1 | Python Software Foundation License | Python plotting package | https://matplotlib.org | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| networkx | 3.1 | 3.1 | BSD License | Python package for creating and manipulating graphs and networks | https://networkx.org/ | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| numpy | ~1.23 | 1.23.5 | BSD License | NumPy is the fundamental package for array computing with Python. | https://www.numpy.org | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| platformdirs | 3.5.1 | 3.5.1 | MIT License | A small Python package for determining appropriate platform-specific dirs, e.g. a "user data dir". | https://github.com/platformdirs/platformdirs | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| plotly | 5.15 | 5.15.0 | MIT License | An open-source, interactive data visualization library for Python | https://plotly.com/python/ | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| polars | 0.20.30 | 0.20.30 | MIT License | Blazingly fast DataFrame library | https://www.pola.rs/ | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| prettytable | 3.8.0 | 3.8.0 | BSD License (BSD (3 clause)) | A simple Python library for easily displaying tabular data in a visually appealing ASCII table format | https://github.com/jazzband/prettytable | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| pydantic | 2.7.0 | 2.7.0 | MIT License | Data validation using Python type hints | https://github.com/pydantic/pydantic | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| PyYAML | >=6.0 | 6.0 | MIT License | YAML parser and emitter for Python | https://pyyaml.org/ | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| ray | >=2.20, <2.33 | 2.32.0 | Apache 2.0 | Ray provides a simple, universal API for building distributed applications. | https://github.com/ray-project/ray | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| stable-baselines3 | 2.1.0 | 2.1.0 | MIT | Pytorch version of Stable Baselines, implementations of reinforcement learning algorithms. | https://github.com/DLR-RM/stable-baselines3 | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| tensorflow | ~=2.12 | 2.12.0 | Apache Software License | TensorFlow is an open source machine learning framework for everyone. | https://www.tensorflow.org/ | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| typer | >=0.9 | 0.9.0 | MIT License | Typer, build great CLIs. Easy to code. Based on Python type hints. | https://github.com/tiangolo/typer | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| Deepdiff | 8.0.1 | 8.0.1 | MIT License | Deep difference of dictionaries, iterables, strings, and any other object objects. | https://github.com/seperman/deepdiff | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ +| sb3_contrib | 2.1.0 | 2.1.0 | MIT License | Contrib package for Stable-Baselines3 - Experimental reinforcement learning (RL) code (Action Masking) | https://github.com/Stable-Baselines-Team/stable-baselines3-contrib | ++-------------------+---------------------+---------------+--------------------------------------+--------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------+ diff --git a/pyproject.toml b/pyproject.toml index 354df8b2..e840797c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ name = "primaite" description = "PrimAITE (Primary-level AI Training Environment) is a simulation environment for training AI under the ARCD programme." authors = [{name="Defence Science and Technology Laboratory UK", email="oss@dstl.gov.uk"}] license = {file = "LICENSE"} -requires-python = ">=3.9, <3.12" +requires-python = ">=3.9, <3.13" dynamic = ["version", "readme"] classifiers = [ "Development Status :: 5 - Production/Stable", @@ -26,15 +26,15 @@ dependencies = [ "gymnasium==0.28.1", "jupyterlab==3.6.1", "kaleido==0.2.1", - "matplotlib==3.7.1", + "matplotlib>=3.7.1", "networkx==3.1", - "numpy==1.23.5", + "numpy~=1.23", "platformdirs==3.5.1", "plotly==5.15.0", "polars==0.20.30", "prettytable==3.8.0", - "PyYAML==6.0", - "typer[all]==0.9.0", + "PyYAML>=6.0", + "typer[all]>=0.9", "pydantic==2.7.0", "ipywidgets", "deepdiff" @@ -53,8 +53,8 @@ license-files = ["LICENSE"] [project.optional-dependencies] rl = [ "ray[rllib] >= 2.20.0, <2.33", - "tensorflow==2.12.0", - "stable-baselines3[extra]==2.1.0", + "tensorflow~=2.12", + "stable-baselines3==2.1.0", "sb3-contrib==2.1.0", ] dev = [ @@ -69,7 +69,7 @@ dev = [ "pytest-xdist==3.3.1", "pytest-cov==4.0.0", "pytest-flake8==1.1.1", - "setuptools==66", + "setuptools==75.6.0", "Sphinx==7.1.2", "sphinx-copybutton==0.5.2", "wheel==0.38.4", diff --git a/src/primaite/config/_package_data/data_manipulation.yaml b/src/primaite/config/_package_data/data_manipulation.yaml index fa10a463..b0d5d087 100644 --- a/src/primaite/config/_package_data/data_manipulation.yaml +++ b/src/primaite/config/_package_data/data_manipulation.yaml @@ -161,8 +161,8 @@ agents: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP diff --git a/src/primaite/config/_package_data/data_manipulation_marl.yaml b/src/primaite/config/_package_data/data_manipulation_marl.yaml index b0131c8c..e45f193e 100644 --- a/src/primaite/config/_package_data/data_manipulation_marl.yaml +++ b/src/primaite/config/_package_data/data_manipulation_marl.yaml @@ -153,8 +153,8 @@ agents: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP @@ -668,8 +668,8 @@ agents: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP diff --git a/src/primaite/game/agent/agent_log.py b/src/primaite/game/agent/agent_log.py index 31d74176..36f8c707 100644 --- a/src/primaite/game/agent/agent_log.py +++ b/src/primaite/game/agent/agent_log.py @@ -93,7 +93,7 @@ class AgentLog: def _write_to_terminal(self, msg: str, level: str, to_terminal: bool = False): if to_terminal or SIM_OUTPUT.write_agent_log_to_terminal: - print(f"{self.agent_name}: ({ self.timestep}) ({level}) {msg}") + print(f"{self.agent_name}: ({self.timestep}) ({level}) {msg}") def debug(self, msg: str, to_terminal: bool = False): """ diff --git a/src/primaite/game/agent/observations/acl_observation.py b/src/primaite/game/agent/observations/acl_observation.py index 86a6463a..cb2cb38e 100644 --- a/src/primaite/game/agent/observations/acl_observation.py +++ b/src/primaite/game/agent/observations/acl_observation.py @@ -24,8 +24,8 @@ class ACLObservation(AbstractObservation, identifier="ACL"): """List of IP addresses.""" wildcard_list: Optional[List[str]] = None """List of wildcard strings.""" - port_list: Optional[List[int]] = None - """List of port numbers.""" + port_list: Optional[List[str]] = None + """List of port names.""" protocol_list: Optional[List[str]] = None """List of protocol names.""" num_rules: Optional[int] = None @@ -37,7 +37,7 @@ class ACLObservation(AbstractObservation, identifier="ACL"): num_rules: int, ip_list: List[IPv4Address], wildcard_list: List[str], - port_list: List[int], + port_list: List[str], protocol_list: List[str], ) -> None: """ @@ -51,8 +51,8 @@ class ACLObservation(AbstractObservation, identifier="ACL"): :type ip_list: List[IPv4Address] :param wildcard_list: List of wildcard strings. :type wildcard_list: List[str] - :param port_list: List of port numbers. - :type port_list: List[int] + :param port_list: List of port names. + :type port_list: List[str] :param protocol_list: List of protocol names. :type protocol_list: List[str] """ @@ -60,7 +60,7 @@ class ACLObservation(AbstractObservation, identifier="ACL"): self.num_rules: int = num_rules self.ip_to_id: Dict[str, int] = {p: i + 2 for i, p in enumerate(ip_list)} self.wildcard_to_id: Dict[str, int] = {p: i + 2 for i, p in enumerate(wildcard_list)} - self.port_to_id: Dict[int, int] = {p: i + 2 for i, p in enumerate(port_list)} + self.port_to_id: Dict[str, int] = {p: i + 2 for i, p in enumerate(port_list)} self.protocol_to_id: Dict[str, int] = {p: i + 2 for i, p in enumerate(protocol_list)} self.default_observation: Dict = { i diff --git a/src/primaite/game/agent/observations/file_system_observations.py b/src/primaite/game/agent/observations/file_system_observations.py index 50ca93fd..784eaa7f 100644 --- a/src/primaite/game/agent/observations/file_system_observations.py +++ b/src/primaite/game/agent/observations/file_system_observations.py @@ -190,6 +190,8 @@ class FolderObservation(AbstractObservation, identifier="FOLDER"): if self.files: self.default_observation["FILES"] = {i + 1: f.default_observation for i, f in enumerate(self.files)} + self.cached_obs: Optional[ObsType] = self.default_observation + def observe(self, state: Dict) -> ObsType: """ Generate observation based on the current state of the simulation. @@ -204,7 +206,10 @@ class FolderObservation(AbstractObservation, identifier="FOLDER"): return self.default_observation if self.file_system_requires_scan: - health_status = folder_state["visible_status"] + if not folder_state["scanned_this_step"]: + health_status = self.cached_obs["health_status"] + else: + health_status = folder_state["visible_status"] else: health_status = folder_state["health_status"] diff --git a/src/primaite/game/agent/observations/firewall_observation.py b/src/primaite/game/agent/observations/firewall_observation.py index a89ddfc5..c63c6927 100644 --- a/src/primaite/game/agent/observations/firewall_observation.py +++ b/src/primaite/game/agent/observations/firewall_observation.py @@ -27,13 +27,13 @@ class FirewallObservation(AbstractObservation, identifier="FIREWALL"): """List of IP addresses for encoding ACLs.""" wildcard_list: Optional[List[str]] = None """List of IP wildcards for encoding ACLs.""" - port_list: Optional[List[int]] = None + port_list: Optional[List[str]] = None """List of ports for encoding ACLs.""" protocol_list: Optional[List[str]] = None """List of protocols for encoding ACLs.""" num_rules: Optional[int] = None """Number of rules ACL rules to show.""" - include_users: Optional[bool] = True + include_users: Optional[bool] = None """If True, report user session information.""" def __init__( @@ -41,7 +41,7 @@ class FirewallObservation(AbstractObservation, identifier="FIREWALL"): where: WhereType, ip_list: List[str], wildcard_list: List[str], - port_list: List[int], + port_list: List[str], protocol_list: List[str], num_rules: int, include_users: bool, @@ -56,8 +56,8 @@ class FirewallObservation(AbstractObservation, identifier="FIREWALL"): :type ip_list: List[str] :param wildcard_list: List of wildcard rules. :type wildcard_list: List[str] - :param port_list: List of port numbers. - :type port_list: List[int] + :param port_list: List of port names. + :type port_list: List[str] :param protocol_list: List of protocol types. :type protocol_list: List[str] :param num_rules: Number of rules configured in the firewall. @@ -140,6 +140,8 @@ class FirewallObservation(AbstractObservation, identifier="FIREWALL"): }, }, } + if self.include_users: + self.default_observation["users"] = {"local_login": 0, "remote_sessions": 0} def observe(self, state: Dict) -> ObsType: """ @@ -153,29 +155,35 @@ class FirewallObservation(AbstractObservation, identifier="FIREWALL"): firewall_state = access_from_nested_dict(state, self.where) if firewall_state is NOT_PRESENT_IN_STATE: return self.default_observation - obs = { - "PORTS": {i + 1: p.observe(state) for i, p in enumerate(self.ports)}, - "ACL": { - "INTERNAL": { - "INBOUND": self.internal_inbound_acl.observe(state), - "OUTBOUND": self.internal_outbound_acl.observe(state), + + is_on = firewall_state["operating_state"] == 1 + if not is_on: + obs = {**self.default_observation} + + else: + obs = { + "PORTS": {i + 1: p.observe(state) for i, p in enumerate(self.ports)}, + "ACL": { + "INTERNAL": { + "INBOUND": self.internal_inbound_acl.observe(state), + "OUTBOUND": self.internal_outbound_acl.observe(state), + }, + "DMZ": { + "INBOUND": self.dmz_inbound_acl.observe(state), + "OUTBOUND": self.dmz_outbound_acl.observe(state), + }, + "EXTERNAL": { + "INBOUND": self.external_inbound_acl.observe(state), + "OUTBOUND": self.external_outbound_acl.observe(state), + }, }, - "DMZ": { - "INBOUND": self.dmz_inbound_acl.observe(state), - "OUTBOUND": self.dmz_outbound_acl.observe(state), - }, - "EXTERNAL": { - "INBOUND": self.external_inbound_acl.observe(state), - "OUTBOUND": self.external_outbound_acl.observe(state), - }, - }, - } - if self.include_users: - sess = firewall_state["services"]["UserSessionManager"] - obs["users"] = { - "local_login": 1 if sess["current_local_user"] else 0, - "remote_sessions": min(self.max_users, len(sess["active_remote_sessions"])), } + if self.include_users: + sess = firewall_state["services"]["UserSessionManager"] + obs["users"] = { + "local_login": 1 if sess["current_local_user"] else 0, + "remote_sessions": min(self.max_users, len(sess["active_remote_sessions"])), + } return obs @property @@ -186,34 +194,36 @@ class FirewallObservation(AbstractObservation, identifier="FIREWALL"): :return: Gymnasium space representing the observation space for firewall status. :rtype: spaces.Space """ - space = spaces.Dict( - { - "PORTS": spaces.Dict({i + 1: p.space for i, p in enumerate(self.ports)}), - "ACL": spaces.Dict( - { - "INTERNAL": spaces.Dict( - { - "INBOUND": self.internal_inbound_acl.space, - "OUTBOUND": self.internal_outbound_acl.space, - } - ), - "DMZ": spaces.Dict( - { - "INBOUND": self.dmz_inbound_acl.space, - "OUTBOUND": self.dmz_outbound_acl.space, - } - ), - "EXTERNAL": spaces.Dict( - { - "INBOUND": self.external_inbound_acl.space, - "OUTBOUND": self.external_outbound_acl.space, - } - ), - } - ), - } - ) - return space + shape = { + "PORTS": spaces.Dict({i + 1: p.space for i, p in enumerate(self.ports)}), + "ACL": spaces.Dict( + { + "INTERNAL": spaces.Dict( + { + "INBOUND": self.internal_inbound_acl.space, + "OUTBOUND": self.internal_outbound_acl.space, + } + ), + "DMZ": spaces.Dict( + { + "INBOUND": self.dmz_inbound_acl.space, + "OUTBOUND": self.dmz_outbound_acl.space, + } + ), + "EXTERNAL": spaces.Dict( + { + "INBOUND": self.external_inbound_acl.space, + "OUTBOUND": self.external_outbound_acl.space, + } + ), + } + ), + } + if self.include_users: + shape["users"] = spaces.Dict( + {"local_login": spaces.Discrete(2), "remote_sessions": spaces.Discrete(self.max_users + 1)} + ) + return spaces.Dict(shape) @classmethod def from_config(cls, config: ConfigSchema, parent_where: WhereType = []) -> FirewallObservation: diff --git a/src/primaite/game/agent/observations/host_observations.py b/src/primaite/game/agent/observations/host_observations.py index 03e9aca1..e46cc805 100644 --- a/src/primaite/game/agent/observations/host_observations.py +++ b/src/primaite/game/agent/observations/host_observations.py @@ -54,7 +54,7 @@ class HostObservation(AbstractObservation, identifier="HOST"): """ If True, files and folders must be scanned to update the health state. If False, true state is always shown. """ - include_users: Optional[bool] = True + include_users: Optional[bool] = None """If True, report user session information.""" def __init__( @@ -191,25 +191,31 @@ class HostObservation(AbstractObservation, identifier="HOST"): if node_state is NOT_PRESENT_IN_STATE: return self.default_observation - obs = {} + is_on = node_state["operating_state"] == 1 + if not is_on: + obs = {**self.default_observation} + + else: + obs = {} + if self.services: + obs["SERVICES"] = {i + 1: service.observe(state) for i, service in enumerate(self.services)} + if self.applications: + obs["APPLICATIONS"] = {i + 1: app.observe(state) for i, app in enumerate(self.applications)} + if self.folders: + obs["FOLDERS"] = {i + 1: folder.observe(state) for i, folder in enumerate(self.folders)} + if self.nics: + obs["NICS"] = {i + 1: nic.observe(state) for i, nic in enumerate(self.nics)} + if self.include_num_access: + obs["num_file_creations"] = node_state["file_system"]["num_file_creations"] + obs["num_file_deletions"] = node_state["file_system"]["num_file_deletions"] + if self.include_users: + sess = node_state["services"]["UserSessionManager"] + obs["users"] = { + "local_login": 1 if sess["current_local_user"] else 0, + "remote_sessions": min(self.max_users, len(sess["active_remote_sessions"])), + } + obs["operating_status"] = node_state["operating_state"] - if self.services: - obs["SERVICES"] = {i + 1: service.observe(state) for i, service in enumerate(self.services)} - if self.applications: - obs["APPLICATIONS"] = {i + 1: app.observe(state) for i, app in enumerate(self.applications)} - if self.folders: - obs["FOLDERS"] = {i + 1: folder.observe(state) for i, folder in enumerate(self.folders)} - if self.nics: - obs["NICS"] = {i + 1: nic.observe(state) for i, nic in enumerate(self.nics)} - if self.include_num_access: - obs["num_file_creations"] = node_state["file_system"]["num_file_creations"] - obs["num_file_deletions"] = node_state["file_system"]["num_file_deletions"] - if self.include_users: - sess = node_state["services"]["UserSessionManager"] - obs["users"] = { - "local_login": 1 if sess["current_local_user"] else 0, - "remote_sessions": min(self.max_users, len(sess["active_remote_sessions"])), - } return obs @property diff --git a/src/primaite/game/agent/observations/node_observations.py b/src/primaite/game/agent/observations/node_observations.py index 03869367..0c5d11da 100644 --- a/src/primaite/game/agent/observations/node_observations.py +++ b/src/primaite/game/agent/observations/node_observations.py @@ -56,7 +56,7 @@ class NodesObservation(AbstractObservation, identifier="NODES"): """List of IP addresses for encoding ACLs.""" wildcard_list: Optional[List[str]] = None """List of IP wildcards for encoding ACLs.""" - port_list: Optional[List[int]] = None + port_list: Optional[List[str]] = None """List of ports for encoding ACLs.""" protocol_list: Optional[List[str]] = None """List of protocols for encoding ACLs.""" diff --git a/src/primaite/game/agent/observations/router_observation.py b/src/primaite/game/agent/observations/router_observation.py index ca455f4c..9687d083 100644 --- a/src/primaite/game/agent/observations/router_observation.py +++ b/src/primaite/game/agent/observations/router_observation.py @@ -33,13 +33,13 @@ class RouterObservation(AbstractObservation, identifier="ROUTER"): """List of IP addresses for encoding ACLs.""" wildcard_list: Optional[List[str]] = None """List of IP wildcards for encoding ACLs.""" - port_list: Optional[List[int]] = None + port_list: Optional[List[str]] = None """List of ports for encoding ACLs.""" protocol_list: Optional[List[str]] = None """List of protocols for encoding ACLs.""" num_rules: Optional[int] = None """Number of rules ACL rules to show.""" - include_users: Optional[bool] = True + include_users: Optional[bool] = None """If True, report user session information.""" def __init__( @@ -84,6 +84,8 @@ class RouterObservation(AbstractObservation, identifier="ROUTER"): } if self.ports: self.default_observation["PORTS"] = {i + 1: p.default_observation for i, p in enumerate(self.ports)} + if self.include_users: + self.default_observation["users"] = {"local_login": 0, "remote_sessions": 0} def observe(self, state: Dict) -> ObsType: """ @@ -98,16 +100,21 @@ class RouterObservation(AbstractObservation, identifier="ROUTER"): if router_state is NOT_PRESENT_IN_STATE: return self.default_observation - obs = {} - obs["ACL"] = self.acl.observe(state) - if self.ports: - obs["PORTS"] = {i + 1: p.observe(state) for i, p in enumerate(self.ports)} - if self.include_users: - sess = router_state["services"]["UserSessionManager"] - obs["users"] = { - "local_login": 1 if sess["current_local_user"] else 0, - "remote_sessions": min(self.max_users, len(sess["active_remote_sessions"])), - } + is_on = router_state["operating_state"] == 1 + if not is_on: + obs = {**self.default_observation} + + else: + obs = {} + obs["ACL"] = self.acl.observe(state) + if self.ports: + obs["PORTS"] = {i + 1: p.observe(state) for i, p in enumerate(self.ports)} + if self.include_users: + sess = router_state["services"]["UserSessionManager"] + obs["users"] = { + "local_login": 1 if sess["current_local_user"] else 0, + "remote_sessions": min(self.max_users, len(sess["active_remote_sessions"])), + } return obs @property @@ -121,6 +128,10 @@ class RouterObservation(AbstractObservation, identifier="ROUTER"): shape = {"ACL": self.acl.space} if self.ports: shape["PORTS"] = spaces.Dict({i + 1: p.space for i, p in enumerate(self.ports)}) + if self.include_users: + shape["users"] = spaces.Dict( + {"local_login": spaces.Discrete(2), "remote_sessions": spaces.Discrete(self.max_users + 1)} + ) return spaces.Dict(shape) @classmethod diff --git a/src/primaite/game/game.py b/src/primaite/game/game.py index 8bc37597..f59117f4 100644 --- a/src/primaite/game/game.py +++ b/src/primaite/game/game.py @@ -258,6 +258,7 @@ class PrimaiteGame: net = sim.network simulation_config = cfg.get("simulation", {}) + defaults_config = cfg.get("defaults", {}) network_config = simulation_config.get("network", {}) airspace_cfg = network_config.get("airspace", {}) frequency_max_capacity_mbps_cfg = airspace_cfg.get("frequency_max_capacity_mbps", {}) @@ -338,6 +339,18 @@ class PrimaiteGame: _LOGGER.error(msg) raise ValueError(msg) + # TODO: handle simulation defaults more cleanly + if "node_start_up_duration" in defaults_config: + new_node.start_up_duration = defaults_config["node_startup_duration"] + if "node_shut_down_duration" in defaults_config: + new_node.shut_down_duration = defaults_config["node_shut_down_duration"] + if "node_scan_duration" in defaults_config: + new_node.node_scan_duration = defaults_config["node_scan_duration"] + if "folder_scan_duration" in defaults_config: + new_node.file_system._default_folder_scan_duration = defaults_config["folder_scan_duration"] + if "folder_restore_duration" in defaults_config: + new_node.file_system._default_folder_restore_duration = defaults_config["folder_restore_duration"] + if "users" in node_cfg and new_node.software_manager.software.get("UserManager"): user_manager: UserManager = new_node.software_manager.software["UserManager"] # noqa for user_cfg in node_cfg["users"]: @@ -384,6 +397,15 @@ class PrimaiteGame: msg = f"Configuration contains an invalid service type: {service_type}" _LOGGER.error(msg) raise ValueError(msg) + + # TODO: handle simulation defaults more cleanly + if "service_fix_duration" in defaults_config: + new_service.fixing_duration = defaults_config["service_fix_duration"] + if "service_restart_duration" in defaults_config: + new_service.restart_duration = defaults_config["service_restart_duration"] + if "service_install_duration" in defaults_config: + new_service.install_duration = defaults_config["service_install_duration"] + # service-dependent options if service_type == "DNSClient": if "options" in service_cfg: diff --git a/src/primaite/notebooks/Action-masking.ipynb b/src/primaite/notebooks/Action-masking.ipynb index 858b4bb6..7fde0a49 100644 --- a/src/primaite/notebooks/Action-masking.ipynb +++ b/src/primaite/notebooks/Action-masking.ipynb @@ -11,6 +11,15 @@ "PrimAITE environments support action masking. The action mask shows which of the agent's actions are applicable with the current environment state. For example, a node can only be turned on if it is currently turned off." ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!primaite setup" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/src/primaite/notebooks/Data-Manipulation-Customising-Red-Agent.ipynb b/src/primaite/notebooks/Data-Manipulation-Customising-Red-Agent.ipynb index d1154b54..756fc44f 100644 --- a/src/primaite/notebooks/Data-Manipulation-Customising-Red-Agent.ipynb +++ b/src/primaite/notebooks/Data-Manipulation-Customising-Red-Agent.ipynb @@ -15,6 +15,15 @@ "*(For a full explanation of the Data Manipulation scenario, check out the data manipulation scenario notebook)*" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!primaite setup" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/src/primaite/notebooks/Data-Manipulation-E2E-Demonstration.ipynb b/src/primaite/notebooks/Data-Manipulation-E2E-Demonstration.ipynb index 143bbe09..dbc6f0c1 100644 --- a/src/primaite/notebooks/Data-Manipulation-E2E-Demonstration.ipynb +++ b/src/primaite/notebooks/Data-Manipulation-E2E-Demonstration.ipynb @@ -371,6 +371,15 @@ "First, load the required modules" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!primaite setup" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/src/primaite/notebooks/Getting-Information-Out-Of-PrimAITE.ipynb b/src/primaite/notebooks/Getting-Information-Out-Of-PrimAITE.ipynb index a832f3cc..f8691d7d 100644 --- a/src/primaite/notebooks/Getting-Information-Out-Of-PrimAITE.ipynb +++ b/src/primaite/notebooks/Getting-Information-Out-Of-PrimAITE.ipynb @@ -9,6 +9,15 @@ "© Crown-owned copyright 2024, Defence Science and Technology Laboratory UK\n" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!primaite setup" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/src/primaite/notebooks/Privilege-Escalation-and Data-Loss-Example.ipynb b/src/primaite/notebooks/Privilege-Escalation-and-Data-Loss-Example.ipynb similarity index 100% rename from src/primaite/notebooks/Privilege-Escalation-and Data-Loss-Example.ipynb rename to src/primaite/notebooks/Privilege-Escalation-and-Data-Loss-Example.ipynb diff --git a/src/primaite/notebooks/Requests-and-Responses.ipynb b/src/primaite/notebooks/Requests-and-Responses.ipynb index da614c93..83aed07c 100644 --- a/src/primaite/notebooks/Requests-and-Responses.ipynb +++ b/src/primaite/notebooks/Requests-and-Responses.ipynb @@ -25,6 +25,15 @@ "Let's set up a minimal network simulation and send some requests to see how it works." ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!primaite setup" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/src/primaite/notebooks/Terminal-Processing.ipynb b/src/primaite/notebooks/Terminal-Processing.ipynb index fdf405a7..9aa4e96a 100644 --- a/src/primaite/notebooks/Terminal-Processing.ipynb +++ b/src/primaite/notebooks/Terminal-Processing.ipynb @@ -18,6 +18,15 @@ "The Terminal service comes pre-installed on most Nodes (The exception being Switches, as these are currently dumb). " ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!primaite setup" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/src/primaite/notebooks/Training-an-RLLIB-MARL-System.ipynb b/src/primaite/notebooks/Training-an-RLLIB-MARL-System.ipynb index 19e95a95..76cab86a 100644 --- a/src/primaite/notebooks/Training-an-RLLIB-MARL-System.ipynb +++ b/src/primaite/notebooks/Training-an-RLLIB-MARL-System.ipynb @@ -18,6 +18,15 @@ "#### First, Import packages and read our config file." ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!primaite setup" + ] + }, { "cell_type": "code", "execution_count": null, @@ -32,8 +41,6 @@ "from ray.rllib.algorithms.ppo import PPOConfig\n", "from primaite.session.ray_envs import PrimaiteRayMARLEnv\n", "\n", - "# If you get an error saying this config file doesn't exist, you may need to run `primaite setup` in your command line\n", - "# to copy the files to your user data path.\n", "with open(PRIMAITE_PATHS.user_config_path / 'example_config/data_manipulation_marl.yaml', 'r') as f:\n", " cfg = yaml.safe_load(f)\n", "\n", diff --git a/src/primaite/notebooks/Training-an-RLLib-Agent.ipynb b/src/primaite/notebooks/Training-an-RLLib-Agent.ipynb index 0fd212f2..7252b046 100644 --- a/src/primaite/notebooks/Training-an-RLLib-Agent.ipynb +++ b/src/primaite/notebooks/Training-an-RLLib-Agent.ipynb @@ -11,6 +11,15 @@ "This notebook will demonstrate how to use PrimaiteRayEnv to train a basic PPO agent." ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!primaite setup" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/src/primaite/notebooks/Training-an-SB3-Agent.ipynb b/src/primaite/notebooks/Training-an-SB3-Agent.ipynb index 5255b0ad..2b554475 100644 --- a/src/primaite/notebooks/Training-an-SB3-Agent.ipynb +++ b/src/primaite/notebooks/Training-an-SB3-Agent.ipynb @@ -18,6 +18,15 @@ "#### First, we import the inital packages and read in our configuration file." ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!primaite setup" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/src/primaite/notebooks/_package_data/uc2_attack.png b/src/primaite/notebooks/_package_data/uc2_attack.png index 8b8df5ce8ddf74ad717c734cd52945164580f0f7..03797d0046e86536f9e7940262303c9db9c7cea6 100644 GIT binary patch delta 55804 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 b3pV`v|N86&mg_Y%fWrqZjPw3*yz+kl6K4t4 delta 55859 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 diff --git a/src/primaite/notebooks/_package_data/uc2_network.png b/src/primaite/notebooks/_package_data/uc2_network.png index 20fa43c996bb7c3bce61778a7aa233ee4b8852f6..10989201b9c56d7bbfdbae05ef78e9df712964f5 100644 GIT binary patch literal 70945 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 Uqh5Am^6jYZ*rSrX&Fs|w0^+#qi2wiq literal 70887 zcmeEvcT`i|wr{YZq5_JFQUw(hX(G~#f}o-zq9RDsh=?>1=_Ob}x`_0mBB0U)q&F2L z)I_C(9wbPBKq57C-rNEFzVD84|GVd&_ue=;;|w`_uf6wLbIm?~bDgK>&uMPnxO*cC zh1z`Tr1}LEYW;l_YHj}db#Ud7*f9e9!;e0B;VcT}x*vt|dW1sFz$LGK6v{yYg&H(P zq2wb_sGWCW3Uw6W#=7fTn(C-Uw z_cQHc5jpx?^zkgb5p_!a*hS~Ip-zl@r5@ez{irNnp@m%;8O)HJIAvQN}w#{X>4}DR< z9!N+&V%VPex~={E_B+H(0ua=5ypPl#W5MS_$u0~#A<&n<0+E|C!wdjJ8cxVN7$nJ z{z~c4YP-=>+cU|(!buCZN>evCycrSF{wk$n8+ZWAv$M>tOHSW>&GL9t)QN5TD;CF| z25G8Slyxqq$!PJL%+7eQv)fgF)p~vF%cE4OmAM3aH)y-LsjDlFjrGAWH#*hN$A@Ld zqH%NU%GaxOzdzbA5^Y{ABG6O6wJM0$O@MM{<>sc(%wY@1)YZACO%^9oaJJ{f74}dJ z|J?mDYx0LFD??D5;E0;H%U&XZi_ern+yc%@Ee+U9<_5Vf=@p_%QdYM)IZ!)u% z^19JWLL4?}d}=)KJUbAzHgQD+zWMQ~ba8N%wX-Q)bu{C7%zke$rgemQr)Xf_S(QB$ zVF{~0{BQIzCkGolu_%;l(;nx*vE^Y}doGr^P_9yGEAH-O=>D@OLgHsts^I5fmx*No zn`=v9-cm6UUv`P<2KS6{Ii^Bop>`$}{prIWVVi5yqb+C**;?Y|*X?R8w04`D8cBi? z!3S2vQN6-X!NeCE*Ae5e>F{J?M#nZ-P@Kai&aErL>*dqZnk7P6@4uC?%r*bGQ*370 z%+9$l%1JTY;cs_P{nxSf;x~Aho~Zv3_QG41FpX84p8id^eY3VK6H+29M$*>iP)5lS z3g@QJLJRI^o7qj(TmL-$Z(syfo#qvdbb(I7MrQ>E$B+V}IfO37L;!&<{ZV=vE#aki zwVT;P>??~4PV;{YAek<&3iYp4hv!2bmOtawIFG@2Iv_J>tjGhhYw-NpJ@%sxHNB~V zD3aH|VO9vY3GOB5llFf-wO!~Y&uWeBe@zVGw&xCydST;-@y>h=gEXf3up5G z2*Lg~&A*w3H&niKlSqd(rraO4{m*(z!Zq^C?8<$PnU&X{9EXvNiuVws2tUl47%;z1 z6q(Hqd=^Sm8ZGA~Doppv>0?)M9$pc=5PFJ9$!-;w+ggg_C1*=Kf3uD|r(Rnr;c{K9CpA~U@Q6jbk(_36#*eA?5 z;h#2id7f_09Gh%T2=qPmJg{C~yhpV%Hm8$&$v@el*2_7r=;f1 z73J`Rk|{JJe!tPPdn-&lBzai~KSkuxUd+!cm);nmnenirG-Cdm1f6&KT71yiIK>0| z&&nUA_@E?uR!qc61BeW2o!ZGTvxO)it|ydXi<-rNr4cB6Qv}(1<5xdzrW4<+t-g4So6O-+WZ2iPy1#E zeiF9psmn9_=bak!`YQQV2^AX}PD7xg_Q$ngW2eQ;PNoVg)~wV*%bOnvM;6WPZIJg#tj zduM+Wdn#Mof17!!XqRVAwdA!2N*tWCe?H-A*I4n?u5YeJ7ADfHgBpEZvyx)?ANP*_ zX6*l`9k2i9)qnYiRT@S{Mr6XTU%xW%{QQzC7$CQK^X5!6Hqhq|>n^#~CAg^QXmmr; z*;qnOPL96je!&%EBXQ0MGe7aYrG=B7U0Pat<0iE`WA!qc9v&X*`QH99_l?b?k6Qbh z)rL73i`@4&34FK|_;}gfrgjwQYocCy4gK*#)me5N>YuQze4?gs(|wM_m*>ZF>MxFc zoswR7Fuic_eJWaFO?`cRtY)g=z3(SZ^Y8s^2f0wj&tE}XY2sot`^)Y>JILu&IzMa+ ze7q62GA#Jz(@U$)LYuxc8iLNes65#XwS9w zle6zrH#0K}eevRig@uK&3bCt;m!19V*ROIa4d1`B2Px0o8fwWDJSZYUdh`68Z%p0WZ0efW63bP4giZIf#`gWkA z-%jzsu&^*?EYR@la2}CYE9}sKeVsJHupu%nDQW-U;Na_b?+z@G7w6(L?MRizV_j~v zl32bEd3kx*WR>}Wd`fzeYkijM#Nd^JyT82X{e_ftKXLb;Ec59?@or7+u7!p4E;n>* zmRT&pws=J2-o1MjIRxW&^6r|Nnx6a2ygu;nF(u8%KRPB^-)iK zZdqCRpYYq^u&{aIKC-$fY0KB|-@hlaW(f)y7#Q??VG;MYOfT3kFE2kDRhE+@y+ho% zgUtLRARxeQ-lg+Dl2*VtEqAb&&!g_v9 zl)iia-dEbPxp%&F*L!&B+xPExOJLM19`7{fv}{hTw(L?{#1+hq)-oH43u>(-ZMJ^* zpg)22Un%qSup*W!<=PT?=|l|1&|{)0HpsfG*yWR4MiI3zhG#3n0ZGv|zM8x)dy!!X zMHZ7DHuYdJ5rq$0(P!it1KWIMp`h=gW=!1`Wd352;z<}eLP+KM@mPCvFeO6E&5W*WuQ8P*1UifGO!bOEAw)4COGwUbsI=d8O9}r z*nEPq+i(DEB`-Q9CB?1&&f+|s>|eCFFzf9QRET$)Xwsw0r&C;Ai@Yg>3|c0#>&ArN zZI&4m`6}&sw&K0DZ?roJ?d|rXm0Y&Ph=7uK9SQRjO$5W~z|K++w;;DG$lL^j6n{`+ zWIFHZ;#wvs1XfvdTlAKJ1vl0bURO7dvXRQ)M46J3{mirSl(TfYE>I$)%yM>eSgCR{ ztZbHcNJNA}ce!?hXVA0d4;S9S@;LPxE_O4k_`H7o+8CQ|SdfKH-&Rua^9h%0oxXuV z8>I!bHm|1ry~XLSi+Xz4ninE&?qzS^3X7GD|KKHNq@+-!%k|A;U)Y0@!W3a6z-r`c zmX=b#hwRh3>sabM_%3;!p;qZpn~oOBZeL&D9^Lqvi#YmG>$Zy@i0$#|WqH6y%JT!- zK&7m#EbJCuqaZsATU&gqT;E_y26bXu>Bg^`7jk211~~^a1a)l6<|nV@-?^3%YfpLHHZ^?(-mu=9-%Z6sgDDw z3b)3SG7=7fa%}6v!Dn|9sq%iPpr? zSzP?9_8{KQXEJv>wJ2%RgtB8irFaZiOEE7jTSqOTmA*|&8@6}He0}vS3@>@w=+~^f z69x}vatpnB#cxD+sAAMG!jm*&yuA{-(!ba< zeKwyuc2By6wQ;OoA{cS@#*2fSUcaLd?|(wAB-zM>W%c$`7Y=dVBTDvyaT9LoSj|(d zZt!D4X4BGZB=&YX?XPl;JC2y;)GL_+WH&IsBL#Sm^f9$5n6u*!X_zWvO!cw6cKV@q zGh;ZXQYp%MkHY@fei}ErUQvssIN%vcCu+yB#ST@hWMXM;{gpq28vo{D{vegSE0wBQ z&oDV&ilbG6h@YlRZppR2y1$h*FB`91WNN>;?@D-jA$38r?eu|%lIL|^i$892NtWrX z-4$-^YLNFUdW)_Ux@wk*RDS;0L`_Id#pbpXmZw>zV)jriFKgVt@8ZFgMzQzzFJY`hDt{3s`*I#5Qe3$!gpFI^ofU7AqHEiF~fo|U%v@rH?}P3Sxz zuu-?0Gk`BN9CV?g-s+O0yLazKwm5cCabb!S8&n^!qGCQ&&Z?r=ORmI{zUWDS?>04--5?p*_$9v-|g-CQA3@& zWjp))P96vXNnm-0N9G}t;kc(Xoezw+rIt1@W0+=CluHcx^g_=#(tiFvtNY6_%43$D zeWCoy6YsPquEv2$3c@UqG1TJpckg!nj)?m#Pb(gCbVs`MIj^Q{rimz*F3?51Y>e%C3(O*8J08w z9~n`jL#^2fiHZ9zXBfwhIV%?#_+K)Q_i)4o?$Qbu8@9t3T)j#{yjQT0INBvWJ$ing zkro@`B_h6hVYE7MdR?THka_7dVbyWaTSv@Grm2C?f~Y4VSj3Az;03C{d0z?|z(W(f z`{)7~-Hv+=5L*~fYUwN$ zM**u1PWqsGI=Mc2Cn(F>)?-PjsfS7zCNk&|mOsBdmdi*B;F8feb?Owkq_i)}Ql3mH zw6AN@Gf@&)>r-mz*lH$6@Y^BkD;Ov%5QwZLC55ZG!(?GJ+`dc3i0EfTlrduA2McBg z9!X$}tIA|%&@XPTruMPJ9y8++N39KTI%k7GbzSo?=Hy+;`=6}1q-WHGru+K%%*@Qh zusVPrfd3pVr^xy(c{wQr8fCLpTzKh zL(##6>KO9`en-#AY7!Mi>d4eEU+Te&Y-f4Xita6pKFF`FUOYUm2Gzeh>2eh&5nI%*r|p z@q}A(*NiK%5dzR$>vq?n_ZLo{IB{a6-qtf)Q$LjgtPr|wq|fcuH-#CAtiMuw95}G} zB)TV!-qROt8|cmJ`gTmM6P&>Op{&}T5}JoC`MYGeiKh!0FM8#}OS~K`fD}!fyQ%p5 z)9R65;utyeE*}{dCVMh202~a(utWMkY)eN+M{!01>t;R`<>$+qYd*cN{DD^Zq^nu? z;zbT^<>?#9$|eXVM9a*dpdhNJzqtXCCCza$`J_OF>kuL7T)w=69P4D)5*Izseee4w zPaFw!s)%10h@YG_=wFZ*78mEc!!zBHr*;Bi{TM5-baG|rw|GrR%gjw-RRTeKi6Fkj zwG!KP;Kpm|=;#d@qXvwtSp2?jt^)4$LBOdO+JtDw}&=;%*_p)qP#3AQ3Bne**Tj8+PJN~UDHTx zG%x#C;uV8gtmAS$%PVyI&YeM3%v9L_Q|_iQUv_I4?D1nyD6q1Z%?fCo&1AFWtH*Di zR`~DWQh!RO5;Zxwxf&3NeYKHb83;b-THuTf)UUoWj=Vq)^!B@cpP(3JY( ztio(7)*OY}`{^A2vU`)z0jNAqU~!|RcQtFR-gt5)1~Ls55fu%9ASV@#N{AtuE29ugd$8M_R`Dg1!nVFJO_1fj;&=(>sx6jL)X-6eo-t(~X!mKs%MX z(q*79?V_`SN$kf4@!77xq{g9`Ou`1qnDMM$2Uv_HVfq%Ni5XW1Fx1-OEu1VX?i*?* z)1jSFSaIf&*zspS#;?)iO7t~NIYwMfKkBZ01oaQ#<6ndden5}K*o2;o1(4agcMkNp zspf~Q<~*x69$%5~mnfV(+W1WDVL3og{h%tjy-+>*$&n(GLE-+)f>DQUz6ShN_-y z1N;CQQefY~v%Q*Y^%PPSCm;dboLLzFhFW&I_c^Izo3=j~T_n_Rezx>JjewAlo-4*~ z7R{1gkA&|Brz*KkR_rXB`g+U4qFTNtzX{%kR4BfEV`FEhxe|)55Bx}!wCkxzO<3l+ zy_y>y?Nx#Z0(5-5!=^%)o~J_Bp_*a$b-P~0_&`H;;Br1MI8-ou3+k~Wt%QEi%m2Ey zwe<)TMwD}{T0)A=_{`?To9815G54Ns9CF}g#bgn^V9%_)BZ@_=dhtLf{XE1)jYxc2)e6S^!G8VT^ zt$S+O{(5~mziQ701;-&MES7(OG7Ug8mVW*&Q1$uQY93z?cYgoS5{F{s(jC(}U3dns zICci) zEzb?#H8nJ031F8PR*&ByjOw2xKP2e=6_R5e4eB5&qi|NYXPMQ$tdU!u)utel>GGfd z^XBg_nU&yu5z5WOH`Bcjxc=OU>C`1wTmJIlJIe)2u*VzhxR>_`^}hwA{u{z;q`&(! z0Zl8_%K{>Xgd~vOKHZib$Q1dfqF42)%Oj)0Ji`Q$8KeeW5jiG;jJWf^Gwr{V^eia2 zg`YDofN!^67y91@m;XbNe14dL1;X6m5tQ4vPZO)N4M8^^{uAp4-!GXpeu_6PI|>Xq z{f$}tDFZII`tZ;HZIq*_;=u!Q^2+0%wU8b59o5&@^r{oSFG00x&Duv_6wfG}Dtlpb{da%+Fc1=Za=zYAcSYBb7>h%_Kk2gMSlp1T(eq8t59ZXPilA zB10UOYwuo?+MwRJF>@oxopZ83AN}nqMnPBr9sLJ+`2-n!Ci3t;D1(C5deYtFCyoQe z6yvA56|}SlsJ+n8&>K7tk0J9aCM(gZ<(DB5s#_60d3@o*g{`&W;z3t!3ieTidtbeI zv-h^8CHl*w4f>i4-Qy)m)+=+Bo-7$X-7Fd6FxPlMxg1rw7j)YNh(AFSc`8nIKh)Q} zhJx4R*|RXd9%<1vVmQ~W;>i&m-?m%(s5MT03;I*F5WZS|)h92Q84gO3e919)Pj|SG zW1-d(=D=NeKt#k(W%{{_4vO*N?hgtV=URRbV}eTD=w>|3sEy}fy_YUttT37TYQiuZ zNOG^)ZYpOCucG2fcft@REf}BYzKmeZ7stg-d~K~hJeNgT=&rhUQ69AQP`k|BI_i%^ zEr0;@zSw?0hu#}WkGGMhFhfN%IiDHNHpT)I&biGV z0C1_|_O^w)WoV#9G(Bfc|UUuNJ z$B+;R6GY?e@nyj)iigty+;2_?WO9%l1~R7#uDs??CK&bq4=`v;UZ>k+rB;yvsg-Qv zZ&c*T&d%<)BW63JPvHn-qn5B*A@srft4F@kJ=s8qJq2i)E6*4b%FN&wP9O-cW;;X> zO;0j{my=y4CKz349pSsvp?!4m5H1G5%#02(&Je^Ig`eO+(`x3?g8(bA>dKO)r(aeaHf{W3oeaE^sze!6|Vqn@f2@d8i&cBGE%v%p5h+a~rkc^Wj z&4V1zMUHn0JdCh}|DFX7R*=%sb8-a&w9F#UOa)55#A{=vJN%BhL%Z*E^$Jsz~ zRv?SuZHW`f77c-ThC3>;9yA1`G;G^ObjNsSTb>7&@moJUApZgh+7POlvMo{7_|&P9 zmq>lxoM)FtovH6R2C_aMnF>E+(Gp?^lCBHwG=JTx+3uS9rrho$5k~i5fY%VCYX=4# znXM?smi|7jg$yXpDziRMVlMJS_9S=-VO{wcfy&V`+Y!+-6 z?a01;U-dN+eYfru63}|tkt!l>Yu$$WL_uw{td)+q-mq(|?aR~} za=<(a8InUP*g49pP=r_= z{t_8#0AEN}a->tkk$2hs?xsAH-*OXn5*GZoVW(R+O!IA!ieRn3cBH+C_TpH8IHJuC z!w`uzjP3Uq`IUXMSIH3wsgHg908z%o45GmI#`DF%;po2K*6oo}C+CLp)!M z#qn0SAr^_#h`}bDdi%BIkJ2({+uKMWV_AWl$|uK$@qJ2;mHt^vDq4+^dH9rn_}Z6e zk|kCKT_h)(ryQk9!s=?CHQsILBPn^AVggGPi`6}sUgb7~3p0YbU282dr@gEU59I(p zM83N+XjETnl()#GwmFsbKVP|uZ?)Pb^WH7P(Er- zySfvgi<#HTpQMuZCPR$~YN<#J`bk#m&pPQ;w|%hA8;Dw=Wi|xHM=ePh%+3@Aqk1I?inZ~X}Gw!95T%R{b8O8pgMplF!zkb zFS=WG`fxz}d6)*ACoApj${z97}OS8q!0pto1j<)Ck>rv)QhD+K&U;PW?F*+$7!&U1iPDUribLwnx9?!mdn~BobcB^ zz@&QL0bqo({uJnPha*RiRziIQu)07hCnRJ&bIPuZw7dbg{_6%rgsOV618Qg+lzmPX zPqtZR-u+ecHuYW@w5ueP9}v>(Rmyc?Q#knP)^9LG4|kg!_PKy$FC^sU2oEIFAoY%T zmQzqJ-$qS1%yg2E=c- z1EfzyWdK(Kz!i5Ky23U_#s?v#a-t!nIn56$-6zy50FTuJWFM>>ogxKclg>uJE-fv! zPeUp&hXBd)X~+lx96&v--DQ3x2&1?|%<#%LG8v+gKma-ji%s%vWkPYr_Qg5g?o!x? zAeCk9OOH#TvD8lSzi%)Hv>Bi;FJTIgKsw`YDG}heP~n1H4%3d6m?M3s=UO8k^sz`S0 zBp3h=4hr^it%c^a_fQZeX9B6-cJE{R1x8S#Xuzxi@+hFQLFSLOg4X>T!w93WpC$IE z>1XfXA!^W=fcjwsp`anaK@dqP4@r6TYR~eGPM|3o7bEw*qeHPfCR)ZePztY@jX$hO zkSn4N0l#mu`Y)Wd$2L08s@`qLe;2?YkOuONsv90jngg^j6CjN-v`(m`B5-5~>FfYY zrU_Ld90|aBJ|M5`^-X~7g*tBiv@u-oz%0&Zf&d`kN(R0z6Uj|Y_4qNz(7)O6vD;Gl zvjD)^0wA(ffP7-*Wo$Y)0R&8KT zGRxAGXe0X`3ah~epc2AkRXKHmgVJLJO_3QW`)zvh;spZ0a_NLbBq%_^5XuuSo2qJu z+2K68{!sql`;@yi2lR|xetC^$0Oj!0L*4MIaw+;p@L`I;q=K1rv9O#q`>Zg3W(HFd-o9PTyG-YXwa)Xl9}X5t&woAU z1Ln>2PM}iKURowt#vt&OHBME3XXO7iy_GlLBt-que;knWKx@zw43RVj0Y8!Fr?F>< zSXPFmgBG2ckA%GNFT*kbCwTB$J`ZxI0b_sDWjJ&gNN>YA4Fj{po#aFAPR%2)^t4qP zV(2XvSnZ{R<#~QcOYZ6nI`a`M{qMd=hSt(RHP7pD-&48 zYt@BS*Xkmmf{B{|?0I$|2Rpme&AO_B(%uj)jd~qv@W&UQ=mJ8z1)P8kUfJ%GoQE0n zji$OPwl zz~3IpikRdN*Q(95#w$)_L;89mH5^`oVr=7SP#t6f=#2od(4N@5+}uibP44g0_$QmW zHpaaJphQj00*x3`xG+Ouu7jPtk@2Rt|3RHpN2j`JzM~@D9f^H@;1_1gRebP<^yyn% zJ$NLHPVfUJsS(ZV2(kBoa_fY`0su{_3zR9T*&2HZ0G#idc0i*^UIhXIfaYNXc(h#V z<7eq+FY2RZ_;QJ$f)aFI1>R{zq6@8SG3|xcvmZP?F<0H@h6duzOAwFqB`Oqz87xmk zHdht+Dz9I?dPT?tou*^5h{3C+0~i}>x$MyK;3&3e2kf#8h&46PAuEZCh;rwmw ztaxHR0^eZ(jE2U#z>9LWg98Z4<4B0>X1tEn@%-%7CrX+WsuE+{QNqyCQW*n~19}Vz zaNj3DI|Gp5guT5zV8-_+X~**dBBW-Q6OAWG;Dyne43~gt^wwWfnWz<>i5ohI*|`_vbT~R8jS`(cPc(!A6yndy^Vh8 zEYkKIeZCB{nr_Z8QR$(BjA%rIcf0X09xOGsJt;nT;x4E6B-JgEf2_Jq7XtP61$0YQSU4%z1|t>@q{;f1y>97rlR0B%M=pwTvk10NR7feT%K zaO3!Ar#+6>y%@=uV|{Wn{lqHQ1Mpf^rWP=NDF8Eyb04j~1^pvwSMw^JO2=ZS2DCA| z!HKb(Y&F*eG|fdoK`UUFLE{g1H_V@W(REh|e4E$;UdW`je6-L-z;`~xxq701HclQe zY|0BGLD&;JjX>xCMZUVr&%N2M3Sc(d0jFW3IQP4p(K8Zn^1<{NfE+5Jp+hQ_YzDG! z*K|p5`w=OyGNIMa14XM8!Da_Q_IC?Lfb$IxzT|wc%f?GS$Yx|EuK5z72MI-(DWhX# z(dxvBuU?ujd!=r^G@K31WV(lRo1x72f`qx!V-G>}}5ACER@ zR*q*`ly_AxG2ceg#aG5|j}NLN#;f%%qn1Ew10QjdTObnMgMrf*e{A=bO_QBR_X0O$ z2DFhBQt&EBqs89D#UM^DUo$sgei*E~F44W&|3O{08@+ZUcR=Vy33uf)(DXZQ#2x2& z1=*LV*A*(q(I6J1{Ng8MlJI|CP4_EA+`0M!orRE ztGPEzI4UE}<1v~1W6&TMwmghc9X2(LhJ!gCxUXM8yeybBuWHYb>@1s*mJ}BG|$FF{ByKOymSKp*ihH}T|`U3*%{(hijRd=5ppGX zFU76Kkj{fOgFBB5X_@frgf&qul3}(m>ZR9m=|n$Tai9gpK~Tr2kkww}1}87}T%_FviXJtSHce_XNs{jDQKsu?aQ)X7dLwNy$veisx7Ja8Zo>J@eJ z>&BN_P6V!xzCp7b#v^$Hd}{E39E?fR=xs$Gzs zBB}8e@1=0w=!btR;uAQxG3e7x_{XXnk+RW3?&LK*a#V=EIGCNv7?8NiM8^l5;bI<( zvpvuUsgLz4Uap^O_^ohix^w&Zwk+c<8`{8Y1v3TYfSfa@EpkkR?EFVv5|SBXG)&6+ ze*m|?Cjm458OeV%>+st$X!_goxe(9QV3(t|t%J7fB?aKn7QJAXn{~pqh>nuD$*8W) zJ?Ha7d<`gH9cWq9HXna09KRi&j>AzNk~17!+fT9<-dp18f)bPp*512g{^+6KE0LnMwf zNdMCBk5a3L`Sm3lJ(kot=0VL&0unQz4 zm-PYrQlD&R%-y?RKaiJQ7_eF=tJ00ifTfXs*?+v#<{z70h1Ry=o#al&MaE7b$s#ZI zCD2GGsIK5jdk zbiSw^?xPa)md@ZYl|@u$TbrkxfIU7&(xZj%6Ad&@tY{kGDXwPaEA8!uRPfFlaR5?Q za-_9h{q4S7mF4X#LJZhAr%np;88YO*fKVc$%@pv;k|3V+FIiRW-snsJr z#Hr!PDHe|y)Q3MlU2Ev*=$Li@_#(&7o#s3nkisY&?VvnDw#*7dCH#QYWaVg^7L>$M zs+G{f-SC#!v@z>C_5lA0q&aNP6}rD5oe=G?mw(S+=S!fxe*PWzLo$U=q1OFWlg4nG zmr`Q&v9hV$G-M)Z$c+IZH0(x@m<0~^N$8#|E*3|8e$`chilb0Vg8~nl!|-amIO&sR z27r=K{2P!R^xut{TA=TnmPwf(w(vTlw9wn6 z>DBTYpF8yzF+G_=o&YpLdF@5=(Gr7J)2+Fwf*chVw(-xQ!lLmFIWQ{T#$!K)Q}FbL zHKzAme|`;fem(LIs&3I=_DD2?@rMKK09_67*d4y2+`K$Z$j^j^g&}=Q&9y_90FtR* z@qy3@Q9jbUVMIBpBu=tZ@;__54`waTRXTsZnH>Q)c^#LVj0kZy!(4?zBcd!S`wWtVuyBNcnJ0{N z(mZ7V&uh;M2y@>8dvfKka1*54b=UX|1ol0-?KTuiCxBzeKvN%rZq~4{82DK-P}U5Y zCkU6#f}}Oo5g0J?n0c(jW#eh2SrX}XrC}Cl5m0grc1xNAcvvHuK_02ZFKUP*O(4Lk zk(NRL;UJ$Gtre%$=|i>*d@8w&hmc$|%fL!v-Pj5b|)0_vrlQ8W74c9?f83Sle^b_D;f6VYGTyj|pS#oC>QY`_XG=EKl9{nc+L zy~+hz$$lBKj?4EKPO2f@C}nfCWkU{i5QtnKZp)cZH;49%hsH<~EA*VWFR^L~xpRzE zOk7BVg%14i6Ff11Kx#nIYJ9=n}*g6D=>^ zz{3!q@adU&I6&X^#1%R;@w&!lK<@1(J}!2w7=}4?l~XC5`F3ceVFAF&%yos3h(LNm z+!V>|?2NvL39`!Kba68V>4P!Ebg$;CD(Hg#5O_ME$`!B~+hjWKs3C+x4w2x@@%0M= z*Qqp--+tJ|h3JJ|(IXG$N^^5fD(@4FYu)BTN&C0=(o0>tb8gu#ni->6>GM4A)%ZNE zK_Rfu@|0il?D5YZ?_ue&qkU@%HoKNw)h_W?S~UwWh2c~32j;l`BVK< z)w(KN&xktfy%%JLy%$HEn{~V-hoHUC2be~^B3i+t0}dlC33U7YnOUJs3=kI}J1syd zNZ*aS?$w0A6*qzOZH~1-M0%IkWGO&AOm;(#6mTBt!Ld@2Y++uPt0jU#pHCn7rn9f9 zsR=>#O9`1kWQzp8WIBdwAFpso^MT?_e}WvrJ5X5e4M?#~@kk|f=LaIYJZMNqLb7q$ z8l(*d>1>fQv89xZRB|D0uED3mvU!Fxt9kw9~W&lu-SJjCokvn!BZ!KA9$_TQ9ZflmDe?UrjYd~ z`A)l+?9Rrk*>zJ z2E}$-FV`k9wTL!8v-=nuDt&NvcM`>caLce+TkURLl%eLMQCI6ezP>d)s+m0oY5NUV z^M^EwruoT#EUQ76Xo;0xG1IJ_s7^}Tlkxe$o;}9Zq8Yzkm3oKHA7@*mYF%({19U(q zjgH=JsCN+}yfXqBOM~+>PKSVqBs4Z&44PnJVF|#3txxhe7c1ZNF+C6Evo|p*Y4Fqi z)lrAdeA$Pl=4lu{i8TT)tZcGSQ8*iqSt$7aZm+nwHjv36mU)$7azk}p-I2AbhOJgd zMGf=Md(2Ksdx}xXE?^Ln(sz_rMu&#Jf%a<=85zPg{LJ~-VyB7ubg$-WBkPrApB-9LQz@LV9JY;m@% zWSwdZWIs;n^4veZ=~XxP!{-@d2SY-iJ$u#Da~-;anVY)dA>h+_yv0K{r39S0{g5RtJDPu;JSLRW5z zCo!!ms2W5ZKa^8f8<9EWdvbDmNg=w*av-cZQ6oq8A&|k)$8;6{IejOhg?sjH)VHZk z#nbzBQF}Sz%Dae&{@~{CZ%%FN3|Bh%7Uctdw`EMXxc8rpx}n&WW#)&ar0W*>b4q@> zC+Gp0Azq3C_ZD>FmH~Id`egC4xgQ^?5t8Ut&4dDb^9C^VW!!hTY(H~gX6L#evL3%H zHeX#+bC{P*CRtxU*kwK9Il=2+C(D2;A>tK+$P+mC69vo~)hWezFx1j!&Y zB@!^R?Zn+dW22*UfnOaCMgZO>a!^!UTqb}F=-7?2aV;%Z8k`O3G(QS$&w1TPs<3=E z$5J_W^|f4ijm|~a@>n+x)PE4Un)gF=_2JvaMn97#K(R1XuVzG!!9j<&U*{b99&VNM})~(xAi(G(chVN zl78Zmnf##W=mTJngOZaLyCD@VVzuX{fx9b24EDda`H zw3BzD#_SMvF-g$aq*HT=EOfthvQ?~MqUvjX)H@R**LIKUeUZ9>$In5 zsX?yQyWZX#ASxQj9?Z~bw(^TqM_QM)0Waj9*EW%C<#(U*w7e5n2B}BLmYxcMvS_zM z6ffbODHsE#!jJhu$pGr!BS)kj-`=85QfHuQAEgDv+cXquUEWsC%c%~P_Njy zxR7Ki+69hw0CK!DIxHm>z%>BBO8N9xtksGq{4K-TPt8CFyrofwrOy{GdLY;5JL?Pv zk(Phxam2W+LBAP`J#_c(-6POaD{b3l_*_W4Igm%8n3@dje0wLj6`jA4Evu`mj}4Om zqb|)$?(KEH_ZX~R(mMmgHQPSd z+|lC^(&iMUw1K z*V}I4lXSRrZ}59sN@1cy!AtZ^lzjF$Ma`hdGl5_Y&#g~{F2O42V(a#!q)bYqSbBqP zixvE7*OkGxQ1NOFosZ+~%6OzADl zNO@%T41F>-iQJa_@zV9<#l&I9p@rknJSeTCr(M`8-uA#=w{2jJY^nhND4k8j3W)FU~oo;Ocjv8#I9W1s{Lm^<7%aP&q zbc+Jw*^UibE%>_8bwva_;6!^4xo zAwu6~Cwx0;U=W236`;zHC_O|;`T_F?&tAOPJ}N)=)YtdNw^wS?_xjJb4m(0V{~VwD z@B1KMrW?<4Y~MZrZQ4J;FxlR__B1F+W;i83zlEdbopxqsW+m-@uiU;mNb>t*BO@b^ zJ(f)6X676SKhsT-0)NIal3(I^Q2WOh9BFtU9D!vQsdWcLLV|N zynwwueZT85x6`~(bWW3~;)QJ!9-fx9dMGvd#rr+pmMn^;Ps70I9TX`ekWHv8gPa~V zLsV(hg%5UqM6b;tV<^;>uk%seg*d&Gk~wcx;05E~ITe|{Bwm8b=SPya?S}Wa@g05}=HvQEWf*2o^&5v43xli38^)1FJxrIhW z-QF0G@3_-$u(K%7qM*3AxY=lThl1*(>ot)x99&$MYmNghJOR+UB0@q~XC)OCqHI}6 zW1?RHrIFfMB)a*mKOD6^rBqd2{T*7vLDlW^F2A-Li+D^9ZiIJ__YS~bJyK5_pxbK@@mc-B@@{eLPnh7NP?{P;mSra*je7i z^n$Kprza|gYJy!!5A0~yf3{8Z9DflW9v$X1+_t^Z5!d}-uaVnu&K{-k97%A^gDkEa zmP=FNlnh&o66$AOa;OAVw|o=}|?RR`9+#W94@!HXiTVGW<|6PJDhQxXUD`dGHz&YWF*kab=UD-VnbuF;>(! zlpOb#lE@->s-;ECf$*DQ;qlfUXJaGjxC>>mTud+1I~?1sD@lkOis<4|ANDvSKf@wv zKtZT)@h)E%wvLCq3&8$s4a?rVsrcCOPB-~mY!wRYKr`$S z1LqLJ|I_Er9gPz?bm$0gkyEwva1P;td~T;rc=^xu(-Ck$&lx5GGKWOE?q|fMG?&eS zSU2exl(NM7M^F=w5moFXd}*?q?6~CxpXb!)!D}Q8aMQV3m8mLHv^8RkONVrfRlfN@ zecBwWCZ!aY*RDNiQhQm_TpIQ1@QW8~&N881ISn>iAiA71y=;z*^G0MG_BWtceeks; z2Y&f-++*sex3P&mfDQHy%!TfQbj9H~r_F2gPoF-0IQQ9`frez};z$!?<8)}pe-Gq| zQgq4E^eT_eBYL*eC}6jxMBP{l9{uR8e%=IrWR5M-7|a(_IVa-d?fdFc6FNOc<_hxj z^}Trhe76$@Y)Y)W!-edd^`Wt`Ja^`yp4)iK9r61{WQBw@;i)6r{V5bGQ0NG_xDC#Z zLoMu$&PV_SQo+p4dj2ZI;hU3n9lxp-c-7GLWmnKNsPZs>=|=E*(mK{^DaHjYSuDx5 z$KXBpOeTec94m3tsg#~}kcvmg-Q8JIv`}oIaaUn#Kb9sBPc5jwxRk60xr)UT_kDdy zVF5B%h}_DrSqZLPUWf$)uR38sE(y1WE&Vzg{ePJI3aBW%uI&L7F%V1?BvceJKn0{> zKtz#LLM2s1x`d$_FhM002_*zYI;9z6Oi+=Ip%D>*85)Kd>fZ;{$M^mI^?iS@|6c2P zaO#e8_Stdmy{`izx_@9^i~r&F1*3%6swheKjxv$R(H~FL!CCX$*)t&q&o|!elTpP9 z!jlN45Guf#H`>3eyYj>REuM@F>(;Fkw*RhREPm*aGH6Pin~g#BX^32*0IAQ}b6Vr< z^l*ptR9`FqwaNZk{B72g_ck1p-v?z37WMJ|^GO53(n(24@ovz+zq`l&#*Hje`qA`w zwJ3{L{OGs0_}e_`Jz()`!4VyDUJ_x>#SFi+Ag%|fns&~0-rdvd<=G#~)~ zo{KAX4n0U2mQ<}y&~H>MamUq{spltwr%te(xtuX^NzmYNwMP^74vd}Ur|Cim5}Sm> zi2@#jxnQTWXMEQWj47XG>A%Qqd*bd%&iiZav*L2H=k@R02LF7tRdEUKqjln=VMbe| z%uvymOVI2urx>%Tt-uw0zoDTC>WI45YFx>=Eh8DalxafJw5|_Al-#}$>irANl z{qub~pvz~9gkdc_X#ldLxP$~tm`fVOLn`&bXX<9gdMNY7Q^Os4 zFhTJ=Wx&26eEsW=4$wa2y10iMIVE0!A~1(oE8gK*WMpb*N#zn7GQptjMVtmND)pV@ zSS+KklbbWI+%6A3{$dnJ*vx<#qiiM;4`CBydsCYW6io=5*YWnu&v2-pKOfY!KoV}C zFW8G<4R$|nFR6qC(~_8AC+m{V0^0YK1+IGUhNkYUSQ=HcI@#D~>&FiY5r!#=V(E1Z zYp6YeFQNrLblI!J((;^BKDl@$o_B%2&x=f*Z;AtF=-k_~BV1hM8Vp~$f zk9L>0f}IyAEO=IKDH|!SXG+?{?J@JZ$z%S0xajl-CsL#R(9{zu9#5%jrE=h0uih%p ztp!~fGFP>^Bho&Wzckvpb0^MOehK)mf`KgyG+P?-tGw!Ru#Ll%8o1j`?N*0TlkN)=u%~Pzk)VdbNb?+ko=i z3MRYVOpudcj}#=fCeSU^SrYdOpOIa3QTrIThKwTw3z=5a=C|9t;v_wo&f|k)m*i1B~KT=E;>$|Y#0yWz9hX1 zvwd!?+=0ranAxWOh0A4s_#;V&DXWseMmXyQP-+Ri+#WxUsb04ljAM6nAS@P+N=uJ_ zDp*gBUF~8D6g);9M&B##XlE0uXI7*Mv9brNvK0y zSaV5#=6SkR$65O$0-6x}KdolRu%175tkz=twwc&4W#g)@i$ygnQP8zfjArI0jQ3?Q zXS#*!L;GLMWvf&>4?cQ1*(ur|_3_Z;MCxP2h4oZo%atQbu~fM+28N z&qF&A?2)tWh44 zt>Ihy2-4Za?ZoMujdAptJzw8M*e2T_jg6Ok1XXDrA|9DZltzE)j0-+f7hF@_%~kx& zOGNtw8vvxZ=oyZ|T=@oO07Y2fcGpkNtCqO;e-rhgE+*$f5=RIGFcU|cWT9D=r+ZUA zmX{}KD_h#c#}4!E+t=9t(^Hi+y&wEAP~RsahHm9k_nkPQ12$96d2^B=fDB)%sx}VD zMD>lzOGMuJ-nZj{=bd^NOv1xd0f-oEZ7Ozso2Fhcbcexd)CpS~b5jgQ&Kd8#lnl}J zv*#los(c0=NhP7_pG;*eG1%r$p#325;Ib=u`qWI?rAwNt{`o!wdptpCT6UNMlqXH( z7xb8SpTLruy)CMk>nZ5GpiH#pFiSr%7>zDMoYR_tIv{>nixtwk=z%aY^3112bbI zxo{!sryqR5b5q}A@*s{}KjXR=gL%x8JXHi0J~n;?%cs|?T^mOvAYh*Spjmw;NT5Vm z@pag^>L)vm#UW>|YTRJ+XL44}8RmXcxtW)2j1l({Sl}`(IohJs;VZf$343iw5Vxba zoLo{SsTi0|6Q)W>0l|T+cg^Ud1v!cYND6G8rHuez{tl6j`;~@ka z1F{xW5TRwDcFha6W6?0EYYt%&PQrinFF* zZvN^;#c#BC>e~8lH9fP*$xr0Cy-s#tA8IuozS^_`D7d^W7vz`L=$T;Mhzkzp8l7>y zXfHsnyUQpXNyq9naymgRYNHY)DryRV9qvO<$q#_b9s6ojN{DX$!yJ;WIe26hK!O1_ zBzE5B8MfHMi0v^}HctRg@{$2~+0eR@-eB&Hej7G|t%z z+BB(DM)>TvV*5Iqre2jKR8r#Op+A~bx{xkEB5)}wI-sCqQum9tbwkkwQR{ifh{ltc zTT=~Ni02^*oF>4)lmy@>B(jW{y><7155{C^Z+~R6T}XYWW@(JQl8SGA zPM6BY&!seTH#g}Vh6%aluO~%6wbRorIcwbAbFo(@#fNScda@+#3f`0o zjJyCp|9x{kjLXMYu5bgScwAPHUTzLy1BO{aMI|Sz+;7yS(?&MQd3(muj*D{uR~<2$ zeOyjJcv>_^k)HHcNcVIfT`&}DV6|Y|jIpP|S5P>6QRbXUzMB}v`)HpGE?yJ4pu5We z%bjSIvj8*ziJ1<|>d_R4N3MvP0FHq32LdVYOda4yU8{*t`SN9SHhzQmD2iA+q;DjW zoXXZO<-W7DT=)g584_EZetgO|Oi;#nm!-}Z8S8|xZWp<87VbI^pxj)FsM{*6u6|Ry zu(qFLX-Xs5tTRD69+_n>ojX^3Cd{eD3o~G5dM(LcVUW%1e-0VuUjn7MAZ7U~D7~P4 zavl^Qz(y});*T+;F5AxW)`+tu!@9YaZShl*t1vNiG0<4blX}F(nIBLrIr}Qpp~V-k zc+t}rT=`iUU)ffI&mKZrZCe=MMQLHom0J-UiR%;8mtsV?y*4}A?Hzbf(Ks8fMh0UQ zNJ7~W+bSb7>LW0$ho6Eliv#B0d8t?)Q0@AOUvL7-d^Db9n5T(osxn~MH!YhX+z+$D z8(oH0xSbew-_8<(Yg9Gia?f^S8A~JNBzhgu>m9op&+A`mnF!8C8W)$h1b8?3;O_h| zbB)?Xe7UFKjb$dK5yy$!d2g)`J6SKW$Z2N1G(CnrKU^hhpc1f?T*p(T<>)Rf8hm%J zl4EU3P9AjY%@u`Zgzv$9iTxH`A9(sR!2TjhWSDbN3OE}HXOiMTxsBo+k9VpqBa=Z2VmmfYNF-C;OIMD+yJTh8}sX`|0 z4Vo)Kv|wp#hB0pIy93g88VEChywiAL6)3pG$v1B$#7iwXVQG!KbD^jiA}C7EJ#630 zbW0{aJ`TI)yVF_UIK_3-*KkK|ZXh^sDAD$;cc+9$J8CT}5zgEXxGnNW_V3qSJ7#Zq za&$4i>Z?H}Z@+ghawQ=7BRn`I7vHCuZV?MJGh4g}xa3Ax-zU@Tz+S9qG<2v5+}Sg=0Ig94gw{UYO$X15O>l}HKD!^vbF6%qn zxJ4*UU@fygti(gdb{is8f2Am& z^T=E`rFZpjqF*bF`w3Wqg=6Y(JY8dd|v9rnKK$0}1u3cbSTPYq*PII5vZ#40M^pT9dUW^{&wWrV33zPl9^mkBvLO~bS zCT==uv2B&yHH+4qq@&UeZbq;z)zo-qf|=4Y|ih zle1fcL4!Mhd&!X7c9dJUvefid)-abjE{Vw)qDYkrHlucxB!l#^qRQ6~&Tb2Hb9zea z{@UVQKG*&A(t`V(TD`;lF?$PJ%RXXN5QBt{`Qmg($rQFd(EWvR+GqPi2Ls%9P2aOI zu+&ePXm4C?ius@y#**ZuX-dlir!%)CE4Li)vx2sa6O2sFe#qbE@s@>7wbz~V(c-ig z&%pk{OI=r^`>V&VQ2D=4_GD=5q(7K=e@-x zbL`LR1q^J8!7bg3x#j&YiHpk$khln>JipvB#3!9M1Yp-2)=xC`6YlyG4Z(Bv6t~pA zeA#cC*w^k~bw0wl>5e<*m7Xpe&de)h%ncx^AU#(njkM1V&pJ`w>|tne#?p*Q-szcZ zKce!@7w)O!%6b)x9g;?f@jr1EE6@n1GleScgdx;uJUAj}}DA zl|48-j?Y{MaI;zeH$<=U?ifu1{L4uL&!g0y7$M4FXWmCE7#TOT*ad^M)bqoia3*r>p zwpz8H?-BpV04dfl2AQuE+nR^?a)0)yqZ_*NATV%ZHk>H18^az5Q7}Td#`@}>?nqIV z=WLxH8NwR{mfjhaB$svX?bQkMX1xer10*~S^i$QJOKDTUZqK5uUO`^W@`W~MVPwAz zPrY3%^2O&F=Qr-7$7m#=)KASfVOuUs+*YjcD3`zC z(<30};S#OH4U?hmSEsg08h5@NzCJlz7Xoo*rR9Z3*DGH(B;8gG(t;Sv&2;R+BbC#) zKLt1C3SD8r;DK-0a`cF(yUOXGmBC6ZI|I8Si5gw_3s-QnOs_%N!~HWtyC^>4;T;_E z6iz93l0cRDP5TEnZL{cFJRgXI%7r~jIH$C%60>}89zve7j)+{V`=0gF!oei#)dU@D z{4F_yvukUhz}oxFX;_OG;R8ie9!VSo9Celk_v)DX-Q`T+EI9u7wubE<=d%O0y*)T{ z?O~VssnQt>uTO!6aApJ=J4eyxHC)|mZ8(oCp<)=YTWXXE!Rf}f*9P0dc4^q(pBC5) zqm-`3X@x3<&a@o_4~WlJbdvtFyD9R)?g8w^SbT3SZcRy4Q7Kb_nt?uXSBe)U}PUGS+0 zAltRnKH?hr+LBEh`YJmB4$3Hv#%44$-Ks6P^|`A}x`fl2b1Ev1C4SmLp@)s)hE5fg zJnw=`%0X$nOtms{1wei53a0*$HaNZ-djGJ}%T;#l!3d6qrBfzK0>}DNU%3>5Aa|9w z*-v}CCS6Q_Xq#D>{e7OXC*u8St#dnDHwwPEG2UPfcj*0S{nk~#w7QBM;uXjS*;cmSZhu#{^e?^&5ruD;|a;WHmH%Zec*tfvO zVtag)GMdNZi$2ij;+?sL^!+$!2MmuDlwX}>WT^=cl-&&@tN}Tpt)$dvji|wcXTv5$ zhly==aUM7eQO^tXE~^t-Cfm4EUqguG{So3@QpWSA=HPh4b&Z$PUaTjeI3=qsEq%G@ z3*Ps>H?SuKQak?~*rDZ9|9Qg~qw;GLRXaMA0C{i2eQo)a@C`-@a0CB26fo$ux5V^B zw0{m^70=;)ydN$>UB@^2;v&bm(2V&S@^Op;D*%A$5g2ZO??Hg@4$U<5 z2G6zMH;LsflsaY@##g3?AOVaw(;IN*|2j5#gF^l1z^+=Bij_C+CI5H%C4G=FV4DPdEDxG~H{^CA>37hn&kNKbKYNgwfsEzK8b3Esq_IlJOY4R<6XCu~pWHYkDnPc8*OzsOiATh8RBJ$sdStdNd zrlgn{EbREf&E$RO85Ek4Vf&BUkoQd$06G4B?AaKFWwi&c{KeA%C+8A2%xGw9$3Yc# zHT$uvccAPsRRFbb_^Y_i=F@JB;Nc?gIw2$_ho?v`<3R9X;%>O#0{~#}#nfR@MjbsW zXsX6I_%LSEEc~owp4^2d%w3c^a0=;pmXxtF{ER*1x#6w^uu!tuxbM$N zFjxg&a65Rm0v`cLaIW28^Raypbb-*`xeJM>9OFJN<3b}vZb*&k8HDQeW{7a{@#Smj zk_2?Z(9Om?)-9Nk9%{xd68NcvDt77djVa3KPxacD%+wkA^%|+pue$Ef<9P>(**I5~QITFGL^ zZq`0(5QS|sZz+1(8jVf#ath7)w$bR?8@Z$sLF1sc$s^AxAo+4h6#pPVTWd%4HjkWk zau((yFD*!UYt)BI)UyxcFiAG*625z(9XEKn-fPi9>I&4?cr!v~V2?Z`Noy!hlqUZ- za?*&#zeY9;>W@<@R(oeYj%+{w>^6;~qPDiP$Xl$9+eewwW0z|;=I(Z7I0Y6N+!)Ut z*i&PW`Z@)fWtMCQ-eV#UMZF@zQbxS9)d zQyiQE>~#%?sc-c#yvKIS-DaGu$3?qx;i7v5up|2SFOIoM`&b)7fwe%}6%ebML2 zH=gJzeEW>yM`C(YLPS1!EJTwv`pH#Em8AQ%Q>a< zH*P3LlT?REayQc%JPbx=faSVMV&6n=7-ca^^X-}Q_Mb`d3wdfb+eW1ZXXll*wOjTz zF0%K5Yp!dQc`hi&vYL&MJ|RMGej9&CkB>yw9h5(8nDx#j^68@(Ifl7egQd>sj4n9JDS_VnrwjM+%Q$W8av4T9jJRAA2Rg%Yud(zMpU%eA3NI=YPg5 zhL1I5cycA=OnR3|i*@Fxdrj<%23$2Z+sphgaP6AMO%KFTS97RxXCC>w5TVPLe;%}7 zJT(fY)W)r|ur$A?w`3x{ytrD8W&Ubv*6^aazl?W#K2bsFy0mTNUg!D*85^aP%eF&) zXnHTRKeHz`|9Wr=+tf~D>wV+A&o z<)BHrq$S&WiUsuNz2;J@E!j@va`Cdp$(u$8n%{0e+FU0X8#q>QdOF7~2{9k$zDL%Y z=jyhh_O!>w!}Wfbs^>O%L;d+y!LOd$#>1W(+d`J6({kuUO?Lz?csz`0bbsv^OB- zM{6r?m*5B!RZ_ZOHg-#NtvB2RMlO8uE4PTmTo_%3D_S$<2{LK?>MBC%IMiS9^wDMA z^60>(bkQShR`U%bwDb(qjbtO!4o1$##_;)QqKN8|f#Hj%?vf~qUOy|n+D2TZb4Rz8Wm8L|3vqF4Jn)G>Y29Y! z8}q!ocpnBnte;E@R1WH-^+}fb+<_(SI8r@)BCRjktk0%iv|GX{)BH{4PI60ZMCrUm zbf|!lIql6DXuUP_Q=RG3MmrqjrUz?P-`fzi(Qg5jEfv>~XZu-dkvd1~f)e|0dh~gE z8@Ht-#2~4HzLhy;mECs(IIRc{%|m3oXEMr}p`anJ+UaRJ2O3M)iLNHWaueks#ef|a z`l4wI1#etB4Zv;%dY@W6O__JncT5|~`+AeE{7GwWcD%Z${u<(Jnd6b^H-cr!Lm?O3 zI?6z(&}f*;PjVA1}ZXtB^^W31SOB@7b zS{njNnq8%v=ILNqr=((H=`I?#9aAtMG0S#2=H9X^=BstiwSB9Ni`Dn{$fg<>;%*#@ z!wtQx-8)jV-eKvg2gVsD;gqEFp)^ajxK}wsL)isCEHkb!f(VY?ymD3k*4W#h@VGM@ zZlaA#>um0Fj<}4%H(smS(Gnlg%HN5-S7IO2Kko%zsgnBh{y#Ep>|- zO%EyRq{xl0o@KdJ-}fC7wi%QLZL0-lLWrIX88gsjh9`%Ch(d@9E?HS{Z+u&xEC^4| zE|uvIVCfqq3PV8sAG?d4UtRAtJ!qwg`5?Vj*6jx;8i%wmMwY7v1GTlx#_D=y7zFEP zGgZLG1Uit5w_B5@&hEt$ZN2W>bF$kYNg5LamqaIw0a=4(KXucd|a!`VedeRaUUNX^VQLmb=~qa0ybgO{)$b zj87ssmX_rVi~3X)8!8v54UL2RvA=!DDLL)3;OtpmC0*8YnZRf03-&(VX7BRZSdDAm z;LCEKPqfdjzj>z4p;~3aRn4aZpOWZO+2%=I_50Q_ha8=TSum>cu1ip8`lF`4}8 ztiBAl!nMpeAcy)HMhUM~s$ADm2 zPx*cseLlHe7_-DuNu4BO>8v_Ar&wNir(6u=c- z{I$BCgRO-{Wpe`_LycuU#@n_fCrS;!4uB$m_~Ekv19Gn(CcWEFj)B(rdB#BRi1PWR z(g8flHmd#X$PqVXq35*R>rzxpVi#6fhgX7bb6We zQA2Q4(#J|^CX>gwG6b9Z#|Utdh2ylR0Yk0#-+#t^QB4{q@DZHk!NUC%!t?}pCWP5n z3WL+trJ-=tKHM-~z_@wTsrz;CHX%~RJl zl1Jy`tv|Cu^<38%y-V?|Z@L#g~)uw?c5L>Mq+wc4tVGUgKOh&xOWR2S~m4S@vmI0^Y! z8Bv+!Cv$VUsvykLWe&T$ZaDX~nFG`_``TCoB}(h5iA7pgsK62ymMzsqdMOrH=A(xk zw|g5(KT?GG7UtqPx^C&t+26#A3$(dZQrmQs43-3U9W%qq9?>sunAsjVaZ(6cD5|+S z*ndQRIU-QB3>6td?fOd?QQ^?_GPz8?YWpPqFe|5g{9q3@9@P>7@or_9+Pq%$1|h1FIYY!C0&XnsaAQ3p6(R? zYWb<%m67MvSIgulx)ni|{>TyJ1ky8B>z!KFZT z&(@1bo2!x_jD)5$7KoCsT!z0Q0`9>uocLN4Whmr;v*Bj--RpqY>>g?Glj|c%>4r;l z9{yE}aoYv()jc947QPPR5Jkc#hr*l)D5tTM)57+4AIm0=Km!O2Q8@+0stZu9o{wRR z5J9;(Kn1(%Vs#fIay)HU1?+M#@{eaqw1s%4WcL{Uya z4{apb(oEsF^M)klkn*%4HUsF8ia!n{sM<66|yxo7dFe7=6niMad5DWe$1Q%s%o)`_aWk8&YoSWto zU~%im^owp;%~|=pCI&Vw8Zmvqbq;D2O_8IYh8h&XHZ1Hu5PZ|$+qSE*k=#RKhpQrw&Cf=^b-hQm&~GSTR!6~*ru_kiGDI=#1;rC6Twl_ zG<#*dMlZ@q-La%9JDeh7<_Y0*I{a94LH1inWM4>A?!(3eh85G>uMh(04J)IXRtxq0 zGaRQw<@erSyB6oxlUg!#u>J;wX*f4240dMLt0&=%#FBL<#EY)X z4EUVuB?D#Zuz-c<3ZKQ}B*7QA`-xewHcTJb|7|WsCbiynE%Z`yXfhPs!yc!#_dAe7 zUPcv3)AMxNTxTv?&{??R6fo9_2XEAMq?p4_%E4$h1)!7zFuM!azr11;PvZbvP9-FL zGzl93nPATVZ)&ul%oiGo;IdNkoM0>poGt}_eenp~nw9bUQFSGsG_b=!@_}-Zm7(Yu#Gh=u(wC;qxS0^3#f=a^kKcBXfTOAsE7a^TL836z{gJ zHtneZP#{Cll{eEBEp{#;mjNT+17?aVVkVQ(bmJ&H#$M|}1VPtv@bUzccLA-pzzT%{ zuje5kiHJY5evOygm`QzBhOH0`o@JRPv5A4W!;(EPmLTy>dxC zg+)r9&n=6#d(L&FMyy@Zd%n6NdpUGeU_uZv&v!60I0&&(cD}o;l8&TKY5gc1RRN2J zi^BV%d?&ZB_(?SUE|je9R?b%t_VWvWmoRcNu!}O%3+gnS5hPN$L6@V*6Gbb4$uxbB ztME)OGA41+Vcr=*oH0yrNUSC~kIcSvoah7ifzythDe2R3UDvSm1}=@_xUk*H8tlPU zHx@4lX6V{lkf&!p3wXpfUxx?m7_EZI*I;O#^kN;iPH;P84G%W<7&6sb^}>>IEO z_2K{=^V~Yh3CO9hShP)NGCYg*;Wgp)1>lgHbD5E_z9}e-=MGr399Y+LQpku>n+%ag$LD)4X#gef|Rjt1P?%VF9>iaBP>0%bC{m*}j zHk{LOYRDNJ`WaaSy6UXTnWLQy&V#M75V<94N2PbY6A<7p`LKnG{>4aPU z(X>d5GU_f2mUrfT^bM7p4_z~esgSCVrWCDNN?%ku9f$+0<#;Dwp3R}-s~0>LiU#pf zy<5Kw-=Da_W(LwVrYBWI?iop=?&W}+ zIs)o}(PM-G)9}?x`WWQZP?Ex;zsNX**5M$Iu>VynI6&d+3oP~Hd!KMk&sFBJ8POh^ zi$g$VNOE9SEU5AsY8`tYLh+9i?Q&~_%B(cz8>%15pUIjzT89lH(^K!C+@%)XTbn+E z@T(AF)8y{USLNkzm%K$XNs@(tdVeDIowY6lCXv}_L|tuo=>(%>iBjOOIZnsnXqUot z9HgmrOS5n{G}>m@Ik@$-nykmLOOW_qgMR5BFkS4Q=;}tXK6pnB>DC+>6p8m7&`Xiy z@_Fg5gnk0vzL#d3LOEtpFJ0^D_7zQIB%#;TxywX?g*cnh^(?;JQR_kqcv%ZSiFni2 zVUS+Wx717KwZzcn$j%XhW)DN|SsIEUM-`FHW3>lSY&71&eZtdQ3;>*Ue{SL9E zvi9}{_nT++Mj=BkbS zNqe7E<)_I)=!jfUSWie91=VHv+b$M{Ptz)1%w1{7hL2Jk-N2?*<$uE{_<`$-H-f%D z=o~w?yZctaYn~vTTprzNb9%$d#>~cx$H?IN(;&0ty7Hem zI-k%2;;aGlV^|(7p6GSE#Kw-Z`t^f#J*I|R0C>w7I{~3kqO2oI32ib5(>ZyzYJ#h} z&nrg_@V^Z3v&kZu<0I5CPrTU9#+)RQ?fSV0@`twkOn2&_VajV9QAVUc0*5TxmEkTG z3O9t^0Q!Ng0aNC-uWweu+YY|dzxn#H{am#&5 z4io{@AV9dKx>6Xo${x)C$#VaI2j)juPnPE}NzdhdSFkY@Lvckhxli?Pcl0@ERP0|7 zW)x7-1S%uqxunjyZXwLLk-A!vwzW<-%DTkZqq0Pd??t#d<*5%S=Bf?&g0my_DT-;fdVKlG zwKN1YHtL9hmU38}bXQuMwifW}4gwulpHGdP5L*K*yLofWPP<+x>RrV!J*PD6hr)0n zRleH~`I^3>A|-e`!=BZ3 zfFap;K+a*KSODnY_~|_GB5!ed$$RMgce&r=`GV(?4Un z$xE{td7WsPSUVVP0gwzzU|h$w-gpKF<2i%I3Y-T3>bx^8i7CK>&B7%jq_bw*zl z1}EkU;TI&YA*g1gZK;q zMSHcJNQQsxg=|8$`7FRxYuc~pw>2Coai<0anb1JFCDsd&GOhp!7T#lWqquaASJeNekdByLXsE#0*I! zO^6mlcza<{6T?Tj@m+fX(QX1G5yp$MW3YfyU`13@*Pp;AL*_?*Ar?6H>>!xY=3?;_ zI|jZvtUMhSKzK0Jl_WU%6wD%f)I!Ch5mAsn6tbYt*oU`?52Cq>YG z6(5Xd`1l9m`i3K0xLq}13fu-Ae)zsXDr#R;^v3Jji@Jf|J^)HbjaZ^ZO$`YiyQ}Ci z0Kky_AfPb-&gj7kcHs;ZTD3OPsz9rkPkl~&4EwB!!SLD8-K>Vb2MsZ!A3xxOeWNwss25CuKsii3KU4ht1P;ejgL{ArrqRnc+ zQ{_g5L)83Jf?+G{(7bT$XmrvO6X7h4AfQBH%G3K%xFjp)fxIki3+`gL2;P|Tvx%*rl z^};}}Vwj*~-*?2fJ6JrC2wg~t!=wa8&SJA)iV|jOqHRbPmdt)7!Cz* z0Gzc(Ysc4jmV(S8;7utgmZ00)+jSN;xKA&L5!eaR(qD4Q_SqDg^l~?(#dW0q5}L`CUu1^5K73l=7d{x4;?xw}1X}xnJ$qjbhki zp=PYpfKUgMtkyMYNWNV31qybQ|D`x({k+}J)I5A%1(F2FcZXW(T%fyn8|Blb-KQ=Z z$j55v=v;@Ifn>03BG??aL8?+aj-ukfJqdVN}crv+{&)4Kxup8j_Fj1xAC(7|Vo>ZD*X{yLbH z&jDC|rxm`NoNiEr8elcGwL=5>A0=>hkm{o>Di}T8r&nJ?*aCLK&IRus8KbHSK z{=ubWrd=4SKUn3^aOK)`=n`iuZFB6p<*mC)JIFUiiHd$ZUdVXT5@C0Hov>R+9Uxa2 zdRQ-MS|@d5!SE-^d%6aw&2i;m4TZBDhFVSv^rq)_Rs*wtI#7*Jpau1yfIt)MbCAZR z8(W{ICmQ$aRU%BN1u$Tp!KdH9e}8w<5cFL+&d-gc$(-_UdM;R6hk)L(x2Ka+Hw;gI z|5@s}6^&FJ1P;HBD*))cs~hVnr~1gwzXiaD9;AuIRWwu<*xlKRhd5))FL@|xaP(x2 z^&OLu@(Rlnbi1qKoI};TQu})=;>`Y26I*p2Uejlt&$g_FZ%6Zau zA7FRCk5#*uOT|X_%gCrb;r2uxU^Zdv?@ytg4VgG5Nz{$elU05|g0?wjnX7o^8|)j9 z-mHL@Q}cf7+m7}A(k9C0ra19GzsKHIU|NNZ6@@Z(ov@k%xhe$tFuwg~f^>61$?W>` zwV1b1x*c=Q)wWv-l?(npyd~s*>C5GJ4v%)cK8rFBDHXnAvP&&zI%=dF(W3rU$@u$c zm_%s_m`5Or9}p$Z`h%|e=cu_13-}`H9)Kl-T5A3r-i)^gF8_H2|Jd_iY0rPrCI7L| z?caaSYO-8!`RfujJ49^pN%+O=$569lzfwP#x#4epo%v=TtUV4w0!*Vf)4TuiYC*Wd z|F$+o!t&4Y9|{crU6-Shv40LTKh(1X)tqRepou35Y6fAE9{#u4geI0&T8jYs610%$ zW?eE^eVIA_Hu%kdj{i_S`0s=If7u|0>9?y$rxUA?6_J;ZgnWGHFTZ@{7Pp&qO6l}u zod)&z|N9jERZa@`{y!xk?5OY$88>fQFPrs@ALB$rZG2qFkC_|r~+F!-C*w|6( z+mpX56v=-Jw(vSsctLxoipt%vQGbo6w_*>pKsiFo*~&+M-Lki0Y}RKsxdNL z@>v|G$wGZ6GqyY+3OyYCRf!$K7Qj}7TK~pY{ORT2c;9=V#)HK;6&V1#cN6eAi(LJ{ zr26#eTXGP4DyO8A8I+#_5%LpY;X9%PMWb~S2WpEF1F@`Ru36*;9XR}d~gyuwr1 z8SM;ogz2LHmPW#4FDMPrg?M;kBbG`!$aSpyWjZr!p^!L62lQRymb-VMeh_v_`Z7X8 zya->uz@$9qMJI;`Id^Ve2$e*kBas8h0f4Bd-WxxFyb4fk*puZQ+QMcaBtR=(3!BX4 zI1T9nDH*@G_$7ul8@1fr+|I3OdDUOPs(8XSJ2;uD%h#@5YY@}Q zGOOLwV-Gj^kCZ@M#@LG*2P`ZQT`%SgRGtGZO$u<-LKvXKal%RiNLkGzV9}<;#Kfo} zQW01yuj1m&VRJjg$oSylL!buW?a2k2Nq;VBT_Cy|!2`{gALfjXPAC$7IM)%Q(stuW znBsW*0AOPV@1%_T0G*Pz zMf#d9m(X>;#(n>oX6$WwbWcF#byW3X7Wmsxloe8W9k`Z5U+XUuE{{tjQD6tCV~teU zr97OTCp{}WTlMDS)7+lI-xk9Vhh=6hsK5Ff2L7)FdVl@|wy3U)&t<(zU%vd5_}7J0 z!C|{S4%_PO2&}KGqj#!#DqqBm`P_x4(wLzyM zpsBj`yz?)c^No8qtMHEDj^n_fm?of9H#?xB-}~c7g9|t89YB|mcb^wj66|~$#*aDf zwK%VcgFUu>A3P0^^ki-_2{VA$wEzQOTwa1hh$neDeq;arO{j)8bA;i|h0<|}X!5=t zz=#vyyHn_TA|xC|T2H&V5gOkoiULXV7?Zb3#ED8Mg#U9Or~MXVEYSAE_kQ_uHbpsz zH`lzrEJy0bk58G;lJ~cNjTEmJHc->i*-rNtiovug{RA)vLqB>|ZXQXu8X*Yj5*!^8#lpu)Bk;iJ6}T^ydf>c&+gy zsA*0%FZ5bk#2H?IJzouhL&&=g9zYZ97nOa75)c@2jkM;b7zSJdomc8P$6f)H;j6HJ zMgtSG5eX`+%PV98Y*C_62~Te<4bApITz>$px{Cm)C?L3_>V{=_mjkiCh$qbvX;;{x zk*T?sSBnv>x)cy5o|lu8i{i>CE^gn7f$Qqv@iKppUm`>M{ZqFmn)Ga+(X+wk5u{%Z z32vm*0Gh*Jz~+wIpta*!UPX0vMm-_)@THdkK}3*sbIcwq`m@LB*%Y1v8A5#_O{tfR zldXY!8n<1|J}fvGmN}@AO&fk&5vRjN9X2#^rSrgTDB?Q)gMEmv;jb75`)Use0H276 zHfS|=ScIG65eGEKI3i>_joH%xtLd}>deNHsD+Wn{IAnV>bB6OhDGD9074bPto zL{$EC=H9F5rvY1*_&1ri0RSm_`8IS3UeAO~1HkT?3<^HFT-J@4&43<# z+xG1iurCF;edk9yOVAHMjn@aCVA}&6U&xt+UY{C~Sxpir+E4k{!E+wT3L8)!0|Pxc zfCnWdi^|#<*Iinbt(HiEb0wdfc@ZztYIOn}z(4}LVIiev1YBA4_w0V31OC2PE=vFB zjZNNaJeUnHp1$jqC&d5rHpU_lN=Fzp(H7so4($7n|6j+Ge|i3J$Ny8o3b+n`x6b{K z{QOtD9AqV2fjci2T3R&*Zl0uB7~O}u<6Hvoof?x$W7OeoK$^8^Io~<}z*CCyiimCc z4Uk^BJl$u+KN1xu0fa1stqqU2XggUiScL(;s2n6ru4)VEOh^bn5qIv;@*FTR%dFrM zZ?00-%QP+(KR%6l_4rbbV;pcN&8~C;0S3YJ3lTUx3E0OGU4&;|ek?e>ozm6jbnzFw zs?GLI6XI{Xbr{((6T-vDe3 zkVBPVF0pIBK+iu2^P4@eOaO+ub3bD$w6m`;RE~ADEeGuuqo5 z92uoq%k}-^E4N2x{`HLP-pgPIy}%nN@!$Nbi;#Nn|1K)?du)~;2=nK8S6=@0ge!0S z8LX9;|JkFKxE4Olp=KK(c*oGgCj57g-OLK%`mYN>AL#$#JNREkrFbTRDlPjr(AXe^ zkUcmQV(>dfla0#!e~YBI+lT+Rs^edQ{XK7grbY7)j4Pln$Ph1QC@=MX^cRKzz(D2= zsszA@HJ^Ur5j^yOg+nD>Hkyj%EYz={Jo*>P#d;Gm1?Tl-+n}p;Q{TtFc+}{N4sZ2e zeQ3+CpfvfA1pT{hL>49h-G99Wf8GQxx6`g=VwmTO+5Io73qLvd7@V;G-Y1TQQ+$p$ z&3?G)dqolS=e7VqMvr(>{v34eLbQ#LsD-BIOf2O`D8Y1+6DDERzLnj$gxz*K{*S&P(z7%En#<*%u-=JR6+BP$<7ixdhN63yvBDA}_7J8#lrr7k&-sKhtuT;O~1D-T}A>vKChWzxw?q#LRoasRitW$7-d196n(xv2TeLUMYiy zm)J89i=w>{?uh&?L>mAjL3uMseQ901nE2`yFBLd|0pQ4Lv0^Lk`UR*V|8!us`@PR0 z85u)hP1Vr~o^A^RhbjnI=ufzM8U}UIz+KFBqgtRaVk@tby7~pk^`d-Fb93{0cAzw< z0ea#bn+^%%^;@rjH!*9A`Q}ol!*+%Foq1-7Jth> zCORi>A?H7bZc|v!LD#Co5~QJchqRJESA0e3;FT-0<CqK`eL z6!bZAZmJm?McHwe#ylZmVNFaWpfhv0T(C))UF@8S@1FG-Qaw|fCJTUuxdZEZrLgb2 zDuOZ5;UQ5+wa-8$?Pmzn6BE@U~B>3-0EScYV|BNLg0Z-}U*G z@l|R6key~fMqIv34cJO@uuGVS*2dn`iCEGGL5^0(zsfooWZ{WXT)o+X2{L`fh4!cJ zwjHaJ2_ukUtCHF z$w_xZY9cDfezgh1F;9_m&YH9I&b^2T?(d-;?d|i2T>c1K5xA6XyP|!DT<3t6HfArn z(N*Deb856e4}a>kl*~*}KXxo~z4@Czo(^aN{U8P6A3ogh^psktuH>k_x%R z1T!46X!$8iylk^&JjWdgN+r(JY9@G&G81{X<#^G#gTd^tlq~F{#3f)uBpC24uUYA*b@SL&e)G*|Yj&^%KV9pFJbL zBDJ)QvH)}Wr-uQyD7Ud4?mbE2z^%PYE(1+^={hTE_*C^{Vsro{da-4#yc^}ZNdnlI zW^~r58_U?#Qs(Dy##H*hEx*u)DhZU}({BG7* zcO2I^x+S6gc8JPl4r7O<9gYCjWZlA1SbSMG{T!_|zhG1aQx+E_7#tS#dDMN6hJc5& zS(0P9x)!g1K=BSMq2fuB7ixXIcRqiBEDzv_uqf92PuD(GIwPC+ZZ zYE)I0`%C!kM6+bf*OQnq^5eZ?0GHOI^~cep(KbPM?^47%Dc`0XF2ZxM$cDoPg%pUP zxQ7SDYW}WF-vu?l{399n9o7j=Jfv1T#yp}&6-blqtGYlyOTqVzfi&ARy}i01WSFg2 zgEhOiC8s4>7L7A_G`^y!=0Wfm1wS5$n_iJ7uwTo-Ah?H+`z*qGy-8&YxLplS4NGwP zy2PxZiyo?Mu*fl!RRyL3J6Jw>_RN{{SRoHYjjp$sMNU>3ho)Lr9L{+kt^B zpLUQNBk#Dj76_uzspW(8+!SqsEj!cuF1@9o4*D>wnn=|c>3PxNXt3-bc77KRgnox5 z#+7{8*I9-raXD@JBE4p_%10Cq@`=?9)!mm#%HX3voo`!HhC}TI6;yLBNJ9Cr9xI!s zFjJ;Tpd$tg=6?{o_ti`#;n6~4mW7%qYb_eaQ)|At4-a zV7S%NPUhAkxx7^>#tUn0R$tt*@!o!aE-F0;rK8~{P$;?vo(Ui>{PBbIb0y(&4aNq4 z#cC$%MYo|#DzAYru0k6<1x?A;rEM06Skb+U%jw(gTmHuIH?s-{KB=qC(^)X|&p6_v zS6a)CoVNSgv(3c-9I|u1(|_}JeQn?Jl(x|MQJdj>SuMj{`qKEmNMF9PG2w!y5Z33Mv$IXO<35L{4oFmfjz4^H*mw!nY@kOI^zfARG_dN4RR=+S_3 z*uj2`(T<1(DZUB`vjp7L|9a!Fh)u#==Rg64eb1tN$0Ljj!-Ex8Qc*znJSQhmU`Se!xo%J7JWJrL3_Yn8;B>~FBva(HU6WII3fXq3$ajAik(dzrAd@RV$)*E-TzcQ)X zj5+Q2yrZ6Xlb~QJMb>5fAx%f||=!HwSQ zB#q@vjBnS!XrSut-2hm1}vx=e98*NGIuyDy+ z+Y`7=XWTOyICVH=A@*6uA$i2K=J}$NNAgfT9(_NSb?Y`BTS!Srzr5%FOAr<-R_hFM0qE&NJq z?~~7}&Za1Vlp(R~q%{|Wb4VnU@M zp%Hl+Qk`-(wE^P(%jP4sEVZ=6Qz=DjkGvMcQ*htKPT(f z7NF@<*i#cP7GDcSFR>xRfz#x?`ox#N{yDk^TA7Ykxpwjs-}mMuS|CA6cI}Bz9n;N0 zSbAm%UcVvPwLgnKrrVPBYR`+t!cN~D%MTq9?&hcZz(!|QQ zt7|MCuCT(jHn$I)doZr+q$J?gkJ{9m>+)RgrhlmR&Ods-iy=bZJJI>WJ%_R2LOTBHnu}*+=KJxFl+VueK{3sHRA~x+R zRWHX6kAPUfe|K;vbe#Y3ZJP3xi-?G@SbPdO8R2lje-)vt5$Od|qmKy=ZhC!jU)8%a z#>OGhe+GjxZ!z#_GOs->(M0-I#i8Njh1vw&TpKNIJopo$0|B=Wu3Fl_@-&P`^x4`L z66u!0rE7tM0>qH@&A}aI`i{XaBJd|E4SSRHp0g!Eq6HK<`}{$fJNNImS7hZKzj*O^ zp`*2p&0gv7CBgd_*%7wk*XQH=G>1P~5%oh?@CVo=*^b^HA|SrhJ!e@o#<-K%(xQ7g z$`mIX6)s=Kwmq*dVqAl>`3g^Jqc!#fe&CDHKz|OJ(vRMYci?{@dGSwD!5ahfe%IFR z)H2QK#;~f)Ws`JjgC<^vNPG`YW|+TNJ@>DMW#eFPTzv8yq|(1$Uw;oR6X78IrFHj; z>)spkBdFw{81>aFTF>IhXYQc zch#xbC8YC8Y<6$&MgJCUV_!_l=(25K=z(KI50Rj6tSJ~2B>FaXB`MVAEWwtilJDz_ z-mHY=VP`kG<%+rK^EypTWLj~T!(m?KDo2jASDx$Bihr#Y5Od#FiI6dTAYqY!)k$i( zUuenBvbsBRS51D=8->~Jo^wRuQQlTJ_Y4qG7dZD<8 zC~`vomPbdtZru1Gb+#Pdjr-FuPMi6VrV=Fb$2ZFE$$tX2yO355EWC2yN6^?=+%;Fz z&dgxQ4GP!t+)+7w8IvdeRLUXfBJhg!{QITzl`!{f?HXZSTx^+dpXr|a$3gIqnh1bJ z6LuLnC|oxcL}bL(Bpmv6S%+vNEb4=F2TA`fH$T!F2~D9vXol=r(busBnGAlZSMCDI zQLTvsG7OT)2=Mb4nUbiw0&7s#tr?H6mvQN0-HW#!j(Y`>jSx#Hd(J?xx zX#~v&)agA|;ZV$E_6duLRq@!aJ;bBrH|SgfXzbzZa(G5uSk8^_Is1xkJq@bE3=m5e z?S|DP+##zE_*^uy1Yjsc!(>$8Q(>0c6s?!#%*M$@`fELV@#4sxdw1@%CM7~<5wDkZ z3MSWiv@I~jv{r~`$E|>XD5O-TFc{I_-zJ+>5lz!2v~A!2;xtl1E^(CmJ4RLz0<$Or zR(#35d`L}AB3{C{j6-g?&dB-eHI`%-x;YOM=|t@|Ic8FHZ)^1WE;N`TctUIb%^}3{ z%6Cj6nz__wLNxW$rys#koeNDQGZh*m5(G`!=N*73&p6^zG|UG=VHJdjqF4Bu%WjJe zS`sHHOQcw*vYb-@-R-bwmK8je{GR9eZ7d+PyEbWjW5uN&=}1|+n$&BAQlgsp$+-)W zc-S`C)eOU%e{QBn+BGDpY5E0H1!=&`)?Wh=G(~52=8j z`%d@;vm+hl;wr6EGVDGeg9)Uw_PX0E_bU|&J z4z1)VYxAawpK{mh+X!}2^GHw4ps~+&e>$XXd-~s3Sj&xcu8l}k3!Zo}e=u(Ju-1lS za5>6**iS$qm>6hc;$dlty}J928F#=nlaFE~n1brY?v2y`cREUR-mXonn07z5y^T7b zSw$I)w6ePic3hSxv@h2M@HFUiQ$=w}0<%jwsYwBD=ORPaFg>r^y;DgDd zqi*MnFZ}d4yDMulTMrLc6)}3(k3%puU4vrb21*;Kz#RlN;P|WG2CS$hA*NKXU6`?wVey z#Q8dOZ0#Tu>O`QAbWM^GA1a#%y_sn%!TKi6g4-@__yYKcq6FQr z^swv5te;Z;9R@Sk$epbwM-w1l{uzubovms}O2k@2s@1-|cY^f4@uxV{P%R*n7L) z2k=Wo-(Projx37GTt3`7VT7T-F&%wOWX3po!1Psqq4J}-}2$yI`2e{?sJv1 ze0@510@(QO->|S=WctEnSE>&Chd&R>q;kv)j5ZgX&lkEoU(#Fc!M(k9`kSPyYurD- ze4R2m`aCLNGISu+m=T^OA^g|W4_T&A>EEcT$I`zk>Gyx@_y69;&s0-pta% zk?mjdypQ#Ejpxi$*xu*j>95g8<7JV^7o_H_N=Xqn37ltRD8o8)1&@=N*1e9d-C`>i zdW4?Mb{IK8{+uUJ=oh2AxMaGJ4*6m3Qa$&{h}N5oQU5BTt7|XO6c|>SQ)3EIy7Nm8 z{n~kCFn>YLWC!gStu48D!#?44`hHhirUsIWJx+pHo%xg)bbi#2(VcC~R6a}j7ubWd zlMC1LTF(E@@nY@o+);%RU{qKobXm-+x-4Y1?w=jFF~IOLexWe!~#z*9Imx7Atwv2y!6dy$`i&BXS1 zgnMh&->Joa>(@uZ?0?0S#*a1qIQ`3AU-MD7Z|_KTvr&KUWNcG^b{GHi-*Sil-utRH zAr<+^$8x7MJ+zIMP_6kycYk|kn_x$j?(8SOcI7f{n1`8Ur95@jByiRlFRH=xG5FW^ zzbW<&bAC_A|3hCtl&1bteU$A_%$ZWNn($OOl;Kkn8$TH(Ne{KD6q+gAyxRv>0h&->AzxHe=Wyz^b7|F%w6)R#*zZR<`mPJ8CAlr zqGk>4yY|H4{F$w;mf#a1z*Vay!3o@kL z&gKip5UJa(D>mg)d^MS`q^R3HmL`z`K1@$Ke<-)C>OXa9U;WuzcO&DAX0|6C09a??)iQ#_ zF~^B6^O*7B@<>PyryqC3mMC53m=75z^jF~ly?GB%A+hMPWzEa!K_qwb>+O<1 z|9toV2fx;cnJ(vzGvnIkrCyr#Sq;tc+9fyR zHTd)2zdsPwR96>de~=u>mYWkrj7obi`0xrOOD5b>){0Dj%p-CGTU%R=dX(%onJz*f zI;;8CZv%v2WM*D3F}Ji7(R2KIO)KTX@#N&>C%R=P<5E*4Hg2p*&^65`73n3HXp!=L zOhK;-3JO>`IpZe|vuqm~DOBL%F44KB^>D6Lzd&XldIW+R6#9)ZjyO13JIWnQDZPrpm0Pr*} zPA1CgP}DIWA0I_Um5g~sAACmdMofIWXDXw6-P4n2V`OynIX&_4WnZrzi(R`)A!n!Y zGvjcl_IqynLV*I8!vh2~_uHko`;w4aA~VpExyt2{R#G_U&l`tuhq+=z~jM$eiXV zib8*9=hMOdo*v~vMv-Rro%5+FDWyGAehf1Q2l@opt-Cv9Wo5hSYinxuo0*vneoMQUwRmC{pFQ`;dfo)0LYUB^gWT^%H%;-e!$pNv7#VP$6+2!HNae*~H#t$W37 zTG+L9Z%FV@P!0PuH8rD}T3Qq+S*-oV`cu}CmkK!@LhrK|l6NW};g5ms?CA-4spjtP ze)025Uh6a+JZ!0yf$ipQDmA{u?%BBhHs;4jih=gAG&MCTJ15|6-a1}G!&^1@F#cF! z?D4^`{=>t=S{e3cii)y7-t$znwCIl}Xl>gs6nGO2vaBkZSumv_@fYjjb#!rYX&XuF z2v>H^!Djx>?(Q4txS@7ZKTXH4CoxC<=)1b0Ks{%Z-sUWsRXa|mn(HoIx>OPEq$3$! z%{$v6?67(}k41&eIT+Oc;Wl=;(QkJHMA_NdTOpv2AB1M&_;cNiomM$qpyKMlYCP|7 z1kxi=7#|-WGwJ+oV03H$=VcO&D=~5*gE~WWdLbY@ZftbQGl@6dOzD3&^5qcjTOi@h z#tMtfva+(gqCZxBFqPfD{Z3F16j`m>En_ES0SdkL#x7L#?_)iTwT12@kCThvht}8Y z-yn{Gx_!gCDSc@SlyWlxOr*-%tZ6LnG!}1`Dx+CfX~O9@^9^OEMkqpJ>HigOq+eFqb$t(<2!7kFgkyJi~Nt< z{u*UjpadkXza22lj7v!GPSz_#^Kv0FaUMPT1A3dwZ$LG*8Y_&SocPA45ImG>XJ;2+ zru<{nmDj@(k}%b@u!BN@aV0}<7jTD)&&7_tJ8y)so2S+!iy2GRs=U6Tfv?mEdz|jh zmYzoy(rKPlM!mfYN zKIhT6E)7;V>4uCZ+!JMfNvIs2h;k)7_@_^wLhrAW04_F_=j3_)`ng`l$Gt0f>p_9* ze}7Qm^6j<~f8nxa%e;>tC;$@U*WBEUCI8gb9y*??Qw@7EFt)3ymoH!5dXRe0yw$cCuoWf zztIZ0BSe{ws;jTzp7^prfC{csF;?TyU@+@9R_^V=PotuESMiUI)#kVzsy)|wpWCLQ zxjB1FoR*GFskrwr_O8krF=&7I;PI=n=Y7b_Emeto^r^afA0TEhf_b>sol|T^XU=R& zGJFpi7N6PP9eNmqM%${x0rvRO+qZ9%V~7`WFF~v#dHBBXhr^j%~%hS5wjH>C&r? z1#jh;j?sjEzT)ogZdO*-1Fk!V|8g7s(N44w~qU+xZHS&-gNVrHe^<|c6Pk->s=Dy7dK+ET3GboS+Pr{ zaX9+*YkSr5OEAy%(*--!rx6T;52hw2-XL!_&z@&AHa>0y3C8W>HbZPHs%U6fA9buN zxq5rk1!fg9*QYSv7L{3S?CduTleA1)94WpxPc&dzK8}kMfX&%_skXM31tG;zeSL2D zI#EeU$^HQ2_HH<(n>#!1(!SkQi=Gb3zfbo>V>+`3eghEpPN3%7sW->>JX%SP*4AF1 zm6a6}ZNW8&=H{vypPs_1w70j{f$x$X?|qeoZGL(5d_z&p3LG;xR(_IQbPGjUamukBG(bR8|$_j8q3Fk&2w)mXIq zxlY>lXK`v%jC5{k+w*#p5zsEp3m$M4myl3`$=8YTN@Y%e<`iM zzuCEa&g~=G?$cLHoEj@S&dUu`L3)ZD?YMz2XjHNSx6|+X=M+^TO7Z#cg-9{h@%fBD@RrO z81+GwQqeAHWfy?DN_kiY9kynbb@H%(FVB&jPg_`0;qRPIxdtvq1Kq6k=fbuCld8I5h3CBSGOeU=g3z~{RqsFrMMP&%EGj* zxqKTX0Jc=P!=scLMYVxX4y|J5ffUlH?Tyy90{A$7D#9qXt71#25Yz>9Jj>2@Q`Mex ziJs9C&*9&4V#~%>GYc2($jQ#f{;D#n2$&%C5*`VSmg%VD-)01cK(uEPEBXe!KMFDI zv$eM``2PL-mD(jtmM@zf`_jbR7-2ah#mUNZJ*uWbB@f=Xq$CnN@l$=*OO%cLHH8b` z-NQ`GW*%II0Cj3=sVz+0>sTV)5MvQy6fIr|6 zEv@{L5bd+BLsP){objf9)nxa6x|>B&{r>&?Tf5^D<*Bvq(iBavEzCEQAOkq*j!1Tm zcIwo?>h}~))3kvy8J3hO(}c9m6^NI_=JQ}knDY&jD!I7Ndk0N~%8z`xsxBXcs04iP zSe{mlq3auB-0EKxyZQyK3v}+3Afo<@dzR8(s^Fwx`?m@QdSB?$_4V{!~-5`N|3e zpVOh9B-Sy!xSk0eaVNOvNThsN1Ofxkkp>wiv5wRG)!M>!5P#imk0|dz*iwiKMNc*r z!gC#r5Z|#Q@3^LJ%G06RPoFj=*uaUl6$dKeGKd-Rt}R=g{c|i3z*r5GN~p2hOxT>- zvUX!&@jeR+3l2%k4a+$sSB8a!S<&)Yl;Ba|a}F=w66QnCre}E%L-?bWwt{l?03w^a z;c@WJn9Nq7LRk^p4PNvuO~K7Ri=*yb$`pE%T~k+*>fpZfJ9VT>&HcW;H~}1XoYeF0u_4=`H*6pp_If+f=R23f8>f!I8DGFTpl-y2A7UUVL%Ncp2%s2D%8e@J8R;j5;X)<{vPj+9k zxcQYuFLZd^lTm#6JmY(GaxqrYUxzl3$9BSF!wMV9-0n(FO)bpL%}w6@r&omM&Tz+8 zZ|t+TFr4QfixEe779{@kh^8isaP~;+b8*N*B=lTq`3D<{eBkALhzdKYy3mnK8TdMQ zigA;)8k?gyK*^6Ic&PqxTVDp2R{tA{pGNx;U0qJ>VDU#xDivQuOgH(_cC8&do56U; za3a~v$3iw zPUK@xh4nE3mV1YySYiC3&E2n<2WFg`h^pX@emv2y^Y`(|BNGk>vlv2#M0=f@Wu`|7 zC~lK<9z5^L7;j1Ru|l+_y4Zi|iWQoEJ>A`#FDY!_zB=kyY-Kn#f2z)@utZ}(t7Wg} z@_mZH=Jn-!Mle$Y)@^~6rFip&OUCwOd<1MEJM>B23jDq#(qax7`)xuPZ+KxpnBnvF zAImfVVNePcrmV8<}Ahzu>NPKXoBBln7X2JwVND(xHv#%eUO7wh8f8^QmDb=d_nw4&k z3#G|4K_%m2*#<_Hwy+mT?Em!0{hTYec}c;Z4L5UQh45Z-*J55|E4oaM0o$C*l)E~m ztHnIXX5pEUYb+E6w=Mx1cg|oya&h}o`f#d#D1g*g&UO6 zC(mTzN=dt&;{;fgDK~N&xL`V_4!`{Bl^8L3qt7vYNa$d1f~jvspMnrP~%SLi+G7u1Gc9{KErWadgp!d*KB>zoK zt=$Q-VB6CcMw5Tx>#_#Q#6Y=n##$yx>V!67qYWxxh4|_nnw^Yw?5d9sEcWQd`k~@3 zUMObLhwirhEc+gMSRZ|H?I_6?*^eOmV4v+7^o@%`?8DSN64vg z1-48I)z>5tl!#64vETHr$W`BdMv9}l*A$l>CjPwN<#YdA`PlzET(3uzg`?veYaJwG zNKZ@xZBGSE$8WL8>({TZ5?b{8E+p*$xd%{?*>qB=hclj3bwlj#?dRur$OZnLdWY%a z&z9yO2|r>Cdi<%-b}Dnw;B0jfHuh2bS%Utbgb zXZu9$Ia#{L!j>Z$ER&-*K24BMsjUZ^h~%5uHUZ?&swB(umd~=>%=ZI!&AdX7D)2X3 zz&#lOB_nVZ9)@6E*k+2*z{t|lQk8LYw5PvYH?n2{lKln#g{v_sCS?514AqeqVp4xBdm9abIFt~ILt6j z>j7{|NA(;L3Z#tnB>Dp$C^DWiXHEsAq$c`S`RkTAd^LXKm!>0x{Uvvv@@@ouwO?Of zALN$Q0vqNcq^MwEu)Ve^nVt%E09j%ru86@j4(mWZY>2DeZI_A$--HvaM$R3qY48}g zg3VKMv1Qop!ds7xXdgoh04^Q$sjjXTZyQPjZKl@XS_82>ML~0$-0NR;TbVy;eR+r* zP*gNEHO=gh>-WZP0bXD}nxnEC`GpyUo*N7B#`7eNKypw}{L0JAixh>!X!ExW4G!iZ zEo4E_y`b0G*#EgtO|ATis4(h+)d4ncb=7`-(HjI_KF+7sed;1If7%Z>5HuB)l`o&t zDS%JaoBg5BmA9f6^pSipvf6Q|T9Yrq0YHO}3pK^+-7<+hWNDNheTMVKCoga^FR!ir zg&#j2!Fc5vV-#1tbb|g?phIBoV!*qtgfaLr8gjn%l?*|W32@UQ2UH}9)F&$pVPy_x z-F(ngew&qoW2|KQaQ(8!rio1=Gi@B0EVpkotkgF(?ddd4%-R{-KQ%eNX3{#X@tzTO zdWlt709#Za#)Tde0wh~K%mIvYGBDx_;Pa+MG(yI-*EQeluO-n>?+Wz9ocUPI1 z);u_Hz$J{NaaIkI(1SiM-`?L=Pv>6K6WZstEqTwQTax``H+Zi@Yo7N( zIvqUD-Lb=&#_FZykKR3URj!3}Q!}&pPcM-7RuDb%AgXZ3>5O}qcVlyvY|lhtt<3Rd zH^n0WeEVe&*PA{DHW>8dq@f9Gv0L48#P;N)Wr@_8hCOln?1sLTF4}pq?pECxVb;=o z^RKRu4?5rC&~iyVJPrdWKl(v!v%HM+VCNGzEQEl7O&d49#{TBE8>|1OlaPS7i!%WI z@Rnh|*;U4QZ~HU2uMn@@2tzi_q+r2S=~aP|(IHG9fg{yECq_qa4tE>t$}@JSJGcj) zU$K1o<`YYU&9eb<5SR&2PeiTj`1tr^fPWa*i_Mu*&*I`910Z2vzn*7fYkP==>R^PK za*((7+eZ5avzQ&^xx+uXB5lVaB1rOs2M>x|wbFmNRF8QMwYm<6*(6zQ!18XY2OAgu zsRP=5e;jyX3XDuNXFv9298O-rDZL}MJkQ3pTRq}|eJ1ePyb~M)i!LJ(EP!gApPD>p z!>U&;{uzDg0u@}`A0>6Or-l-djQ8{y_cqkku?pu*SZCr55bWI~ zSno4W(<*p_25)siabZgeIc5<9DWF>SD=?++I|c%Bf>oA!aVWUC9*Y3~2#^XcOU%y+ z1l^&|FHwPd52`X3ELdQKk{JQ^nCs7H-QvSG=`%vK%o2Nr%?V7R)stH1r}?%*K+RUz zj8Q({&=1O-z1MWqrML z*C?k#1kfZC)d9Ag2g)!GTgyG84*t^WX&q6|`V?M-39Ky@-gRwM1AqkZ48Eyz>f4wF z3i~hhyBJgT)z!sf0{e|%%K7H);&SOta;mnIE*WwIf~4t3@cOD#>WX>e&2;4T+ZJvQ zbdhS#Gwy(;3aaW)z{^q0(BLnvV}M$WppAR)4(WRRXYiYKB{2$A>}feQkXOXF#+XaAf2>s5D!`UKTWR z36=o}dg)jy=>EL^b4xZJ))71#iK(l2>s-3v>CM;oo^xSVvzLcBCCsYvu9J`?CgSu; zW@3sBDpu~qnetHkp97pvMOBrUk=B{bujVaMJuVce{Jit%mbIo@r?xHfxRr+qw85&y|9C#c5qNg=~bbV!1N{U^Lpj6o=ljlp1 z{siO*DLQ}t{LS%8w-awh)DuvI1kr1D+YC{-86)=!gWf!w;m6b(7oUTWKjy4ZXx8tg ztRaheU*(3Pve^)5#3iq1X9swZ#dLjzaO$3{_R!kHmxEb5SxlY{BYc-V2uhq?!@$3&sf7FH<|O!sSx7B1pj zpHK|}-V<#^)zlPvAH-I3-PUP(j94Lww`5vNkxhNw5Ir#&(mWWgIDU;q?|_~BKPNTW zu+s6V9}1H=4mF)vqY3^Et5y*X+sEhTe9U~ zegW{Ic!Br2ZLn*Gj*gD?Evh7+2h=HdIt3tjSgn*Q;js*(e7aBpg)d3^Ltf7g zdD|pxAUe5M#>ggIIp;3zgPPk*YuVSlCB%)5K8O00_=^cMT*gqI-t1!0jYaZXKF{39 zk~5Oemcy;hdAekp@bP#5+EQC9K`EwUy>6Plbk(YIknB&~GTcktGy+mC|w?rltaRVl=L(+b)EmCp_UR|6>C4W254C1T~9PTUQO8*TRQx}dv- z@M_18uS3XAqSbQtxlRbBjF&Ex`<^=|fI^s)VQPp~CZukJSup&`#uH*{tfa$D%@%x! zre9%S*U0xWVjS7r6|CgN%-qFlM=kCDekdL2tZW?|)JB^yTo7O-Rl=R$eLWcThVz5Q zBR`xS_mKoU1`hAQT&3v6votg{`ScR#h!vsDisqn)yYwA&g|kjA9cL#V9gwsD6;1?e zHtbV>Sih@rq#Ui$2%HabQ3DA^7ZYNv6`1Q$+=0IkJh1%t%PUG)2fKQERgx3ayPqk_ z5P_dNqH~|!UL*(wZKJ5z=Fa!P(Qgz2J>^d}xESwWGOv6up&AqKY~}T&V3BL{M7uFD z`6MA<0z6LM=**Imtia}S-c_vRH#(`%p!_svi#&YvPoEJgxUywUe_@>~U$Z~Z?C~e< z(%djf-X1D=@NN3pvJfs2CW|CLP*7sS-a2R&Dr##ryBa=zTnRRn@Zz|{*13KI4#?*=oa=K~^_VI*O2C?=X7tcjqu7GL}8N&IfS1t>)yS3=VnX77VI zQt|y`{3W5t5GPg*2baMzQ{dl;Qm@FEkUPoNg&&&zlT6cCVZd~->(wTG1tqabgKjio zrvvFNxqN&CJ= zHbQ45U%r}l0Y>n7v*_!|4|(#?ohDs)?}!kPC>>CYcQ05V>t=DpVle-a^LK4@%dXES z?umrM>P#T_1n}&#lu1I=yz^Y4NJCCe({vxwB&;r|{~O9eX=n7_-oW}rkm36;T59x3wQ%&a7?3_S zHopI$rudB#ai;}>GKkv@LxO`Zuqk-bqQ^?>-gqwOyg@1SSF*9OA=Oy!USM<2ig{+& zdT0Yhb5F3NLPF+`qP)pN#dzJW9WpK6_-!Gq|Hh52L_0CeUSd}Qdxacu6>Z>1K5=6w z`)fyBM9&H31e^J!$@;%4HSRqLQvudIQiDIN(pA#NH-7Ffeu3$hsMxh#9=$W7b21%w zUH`rRg6V&*mlpW|dxjt^?7qU6!QbZY{R<2*n6P{%`H)_>D0#{qM@uf7wE83HZ-RreF7e zMsRu<{vVzY->pRQ*pQ11k^YDOfBT z_`pfuH#$^XmGG_3^|zWj1yrIpQD@mppN7A$j#I+c7R_h#XD zR>eyFK1PYz?2K+*&4L^^dd8I0++$f6PfmC;C@WxK%NY&&1+Ozw3!&~)t4bi-UC777 zYPs9EOaRmLV7QK{Gh8%;wV96-$4il6&UV?-S2s2uFs#JTRZ4ark!aPQxG51W_p1eh z$E(V?LU-1d(E*0=Fyq4-S_gwFjN84En#nut+BHDCKTv+tD~Mw@+xY1YhP~PZwPhKf zyv1aSY3sy5*-ZhV@j#REWixlev|(U=&ZIu&{r4qzw{tj{rOC;E?^z$|{P|^(vHJC0 z1#59L*@F?oCsuFzc>vQBihfp4(VNk|++Gd|=Hb>#foyv>7)^cUc4LR^{2lA)xMn2Y zCROU!ScQsXhf(x0Hy=7 bool: diff --git a/src/primaite/simulator/file_system/file_system_item_abc.py b/src/primaite/simulator/file_system/file_system_item_abc.py index 48b95d20..db51924c 100644 --- a/src/primaite/simulator/file_system/file_system_item_abc.py +++ b/src/primaite/simulator/file_system/file_system_item_abc.py @@ -43,6 +43,9 @@ def convert_size(size_bytes: int) -> str: class FileSystemItemHealthStatus(Enum): """Status of the FileSystemItem.""" + NONE = 0 + """File system item health status is not known.""" + GOOD = 1 """File/Folder is OK.""" @@ -72,7 +75,7 @@ class FileSystemItemABC(SimComponent): health_status: FileSystemItemHealthStatus = FileSystemItemHealthStatus.GOOD "Actual status of the current FileSystemItem" - visible_health_status: FileSystemItemHealthStatus = FileSystemItemHealthStatus.GOOD + visible_health_status: FileSystemItemHealthStatus = FileSystemItemHealthStatus.NONE "Visible status of the current FileSystemItem" previous_hash: Optional[str] = None diff --git a/src/primaite/simulator/file_system/folder.py b/src/primaite/simulator/file_system/folder.py index 78dba4e6..3dd5d1ce 100644 --- a/src/primaite/simulator/file_system/folder.py +++ b/src/primaite/simulator/file_system/folder.py @@ -46,7 +46,7 @@ class Folder(FileSystemItemABC): :param sys_log: The SysLog instance to us to create system logs. """ super().__init__(**kwargs) - + self._scanned_this_step: bool = False self.sys_log.info(f"Created file /{self.name} (id: {self.uuid})") def _init_request_manager(self) -> RequestManager: @@ -83,6 +83,7 @@ class Folder(FileSystemItemABC): state = super().describe_state() state["files"] = {file.name: file.describe_state() for uuid, file in self.files.items()} state["deleted_files"] = {file.name: file.describe_state() for uuid, file in self.deleted_files.items()} + state["scanned_this_step"] = self._scanned_this_step return state def show(self, markdown: bool = False): @@ -135,7 +136,7 @@ class Folder(FileSystemItemABC): def pre_timestep(self, timestep: int) -> None: """Apply pre-timestep logic.""" super().pre_timestep(timestep) - + self._scanned_this_step = False for file in self.files.values(): file.pre_timestep(timestep) @@ -148,9 +149,17 @@ class Folder(FileSystemItemABC): for file_id in self.files: file = self.get_file_by_id(file_uuid=file_id) file.scan() - if file.visible_health_status == FileSystemItemHealthStatus.CORRUPT: - self.health_status = FileSystemItemHealthStatus.CORRUPT + # set folder health to worst file's health by generating a list of file healths. If no files, use 0 + self.health_status = FileSystemItemHealthStatus( + max( + [f.health_status.value for f in self.files.values()] + or [ + 0, + ] + ) + ) self.visible_health_status = self.health_status + self._scanned_this_step = True def _reveal_to_red_timestep(self) -> None: """Apply reveal to red timestep.""" diff --git a/src/primaite/simulator/system/services/ftp/ftp_client.py b/src/primaite/simulator/system/services/ftp/ftp_client.py index 16cefdd6..82875b97 100644 --- a/src/primaite/simulator/system/services/ftp/ftp_client.py +++ b/src/primaite/simulator/system/services/ftp/ftp_client.py @@ -118,6 +118,7 @@ class FTPClient(FTPServiceABC, identifier="FTPClient"): session_id: Optional[str] = None, is_reattempt: Optional[bool] = False, ) -> bool: + self._active = True """ Connects the client to a given FTP server. @@ -174,6 +175,7 @@ class FTPClient(FTPServiceABC, identifier="FTPClient"): :param: is_reattempt: Set to True if attempt to disconnect from FTP Server has been attempted. Default False. :type: is_reattempt: Optional[bool] """ + self._active = True # send a disconnect request payload to FTP server payload: FTPPacket = FTPPacket(ftp_command=FTPCommand.QUIT) software_manager: SoftwareManager = self.software_manager @@ -219,6 +221,7 @@ class FTPClient(FTPServiceABC, identifier="FTPClient"): :param: session_id: The id of the session :type: session_id: Optional[str] """ + self._active = True # check if the file to transfer exists on the client file_to_transfer: File = self.file_system.get_file(folder_name=src_folder_name, file_name=src_file_name) if not file_to_transfer: @@ -276,6 +279,7 @@ class FTPClient(FTPServiceABC, identifier="FTPClient"): :param: dest_port: The open port of the machine that hosts the FTP Server. Default is Port["FTP"]. :type: dest_port: Optional[int] """ + self._active = True # check if FTP is currently connected to IP self._connect_to_server(dest_ip_address=dest_ip_address, dest_port=dest_port) @@ -327,6 +331,7 @@ class FTPClient(FTPServiceABC, identifier="FTPClient"): This helps prevent an FTP request loop - FTP client and servers can exist on the same node. """ + self._active = True if not self._can_perform_action(): return False diff --git a/src/primaite/simulator/system/services/ftp/ftp_service.py b/src/primaite/simulator/system/services/ftp/ftp_service.py index 52f451e1..13acda70 100644 --- a/src/primaite/simulator/system/services/ftp/ftp_service.py +++ b/src/primaite/simulator/system/services/ftp/ftp_service.py @@ -3,9 +3,11 @@ from abc import ABC from ipaddress import IPv4Address from typing import Dict, Optional +from pydantic import StrictBool + from primaite.simulator.file_system.file_system import File from primaite.simulator.network.protocols.ftp import FTPCommand, FTPPacket, FTPStatusCode -from primaite.simulator.system.services.service import Service +from primaite.simulator.system.services.service import Service, ServiceOperatingState from primaite.utils.validation.port import Port @@ -16,9 +18,22 @@ class FTPServiceABC(Service, ABC): Contains shared methods between both classes. """ + _active: StrictBool = False + """Flag that is True on timesteps where service transmits data and False when idle. Used for describe_state.""" + + def pre_timestep(self, timestep: int) -> None: + """When a new timestep begins, clear the _active attribute.""" + self._active = False + return super().pre_timestep(timestep) + def describe_state(self) -> Dict: """Returns a Dict of the FTPService state.""" - return super().describe_state() + state = super().describe_state() + + # override so that the service is shows as running only if actively transmitting data this timestep + if self.operating_state == ServiceOperatingState.RUNNING and not self._active: + state["operating_state"] = ServiceOperatingState.STOPPED.value + return state def _process_ftp_command(self, payload: FTPPacket, session_id: Optional[str] = None, **kwargs) -> FTPPacket: """ @@ -29,6 +44,7 @@ class FTPServiceABC(Service, ABC): :param: session_id: session ID linked to the FTP Packet. Optional. :type: session_id: Optional[str] """ + self._active = True if payload.ftp_command is not None: self.sys_log.info(f"Received FTP {payload.ftp_command.name} command.") @@ -51,6 +67,7 @@ class FTPServiceABC(Service, ABC): :param: payload: The FTP Packet that contains the file data :type: FTPPacket """ + self._active = True try: file_name = payload.ftp_command_args["dest_file_name"] folder_name = payload.ftp_command_args["dest_folder_name"] @@ -106,6 +123,7 @@ class FTPServiceABC(Service, ABC): :param: is_response: is true if the data being sent is in response to a request. Default False. :type: is_response: bool """ + self._active = True # send STOR request payload: FTPPacket = FTPPacket( ftp_command=FTPCommand.STOR, @@ -135,6 +153,7 @@ class FTPServiceABC(Service, ABC): :param: payload: The FTP Packet that contains the file data :type: FTPPacket """ + self._active = True try: # find the file file_name = payload.ftp_command_args["src_file_name"] @@ -181,6 +200,7 @@ class FTPServiceABC(Service, ABC): :return: True if successful, False otherwise. """ + self._active = True self.sys_log.info(f"{self.name}: Sending FTP {payload.ftp_command.name} {payload.ftp_command_args}") return super().send( diff --git a/tests/assets/configs/action_penalty.yaml b/tests/assets/configs/action_penalty.yaml index 9ab13036..3e57f579 100644 --- a/tests/assets/configs/action_penalty.yaml +++ b/tests/assets/configs/action_penalty.yaml @@ -69,8 +69,8 @@ agents: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP diff --git a/tests/assets/configs/bad_primaite_session.yaml b/tests/assets/configs/bad_primaite_session.yaml index 1cd0883c..9cf95a64 100644 --- a/tests/assets/configs/bad_primaite_session.yaml +++ b/tests/assets/configs/bad_primaite_session.yaml @@ -74,8 +74,8 @@ agents: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP diff --git a/tests/assets/configs/basic_switched_network.yaml b/tests/assets/configs/basic_switched_network.yaml index 10a92d7a..a39bf876 100644 --- a/tests/assets/configs/basic_switched_network.yaml +++ b/tests/assets/configs/basic_switched_network.yaml @@ -88,8 +88,8 @@ agents: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP diff --git a/tests/assets/configs/data_manipulation.yaml b/tests/assets/configs/data_manipulation.yaml index 328fe413..726c9ab0 100644 --- a/tests/assets/configs/data_manipulation.yaml +++ b/tests/assets/configs/data_manipulation.yaml @@ -160,8 +160,8 @@ agents: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP diff --git a/tests/assets/configs/eval_only_primaite_session.yaml b/tests/assets/configs/eval_only_primaite_session.yaml index e277a881..41b7fce9 100644 --- a/tests/assets/configs/eval_only_primaite_session.yaml +++ b/tests/assets/configs/eval_only_primaite_session.yaml @@ -102,8 +102,8 @@ agents: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP diff --git a/tests/assets/configs/extended_config.yaml b/tests/assets/configs/extended_config.yaml index 0ec0c91f..bff58ebd 100644 --- a/tests/assets/configs/extended_config.yaml +++ b/tests/assets/configs/extended_config.yaml @@ -161,8 +161,8 @@ agents: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP diff --git a/tests/assets/configs/firewall_actions_network.yaml b/tests/assets/configs/firewall_actions_network.yaml index 6b454a12..4b11dbcc 100644 --- a/tests/assets/configs/firewall_actions_network.yaml +++ b/tests/assets/configs/firewall_actions_network.yaml @@ -77,8 +77,8 @@ agents: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP diff --git a/tests/assets/configs/fixing_duration_one_item.yaml b/tests/assets/configs/fixing_duration_one_item.yaml index 02aa8e4b..da5a9993 100644 --- a/tests/assets/configs/fixing_duration_one_item.yaml +++ b/tests/assets/configs/fixing_duration_one_item.yaml @@ -81,8 +81,8 @@ agents: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP diff --git a/tests/assets/configs/multi_agent_session.yaml b/tests/assets/configs/multi_agent_session.yaml index 3b746273..93baf4af 100644 --- a/tests/assets/configs/multi_agent_session.yaml +++ b/tests/assets/configs/multi_agent_session.yaml @@ -152,8 +152,8 @@ agents: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP @@ -666,8 +666,8 @@ agents: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP diff --git a/tests/assets/configs/shared_rewards.yaml b/tests/assets/configs/shared_rewards.yaml index 7ad5371d..d5615a72 100644 --- a/tests/assets/configs/shared_rewards.yaml +++ b/tests/assets/configs/shared_rewards.yaml @@ -151,8 +151,8 @@ agents: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP diff --git a/tests/assets/configs/software_fixing_duration.yaml b/tests/assets/configs/software_fixing_duration.yaml index 073a5f83..f685b420 100644 --- a/tests/assets/configs/software_fixing_duration.yaml +++ b/tests/assets/configs/software_fixing_duration.yaml @@ -81,8 +81,8 @@ agents: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP diff --git a/tests/assets/configs/test_application_install.yaml b/tests/assets/configs/test_application_install.yaml index cafcc72b..25bc38e6 100644 --- a/tests/assets/configs/test_application_install.yaml +++ b/tests/assets/configs/test_application_install.yaml @@ -155,8 +155,8 @@ agents: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP diff --git a/tests/assets/configs/test_primaite_session.yaml b/tests/assets/configs/test_primaite_session.yaml index cd5d08d3..2d124981 100644 --- a/tests/assets/configs/test_primaite_session.yaml +++ b/tests/assets/configs/test_primaite_session.yaml @@ -103,8 +103,8 @@ agents: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP diff --git a/tests/integration_tests/game_layer/actions/test_file_request_permission.py b/tests/integration_tests/game_layer/actions/test_file_request_permission.py index 0976abdc..cab80434 100644 --- a/tests/integration_tests/game_layer/actions/test_file_request_permission.py +++ b/tests/integration_tests/game_layer/actions/test_file_request_permission.py @@ -69,7 +69,7 @@ def test_file_scan_action(game_and_agent_fixture: Tuple[PrimaiteGame, ProxyAgent file.corrupt() assert file.health_status == FileSystemItemHealthStatus.CORRUPT - assert file.visible_health_status == FileSystemItemHealthStatus.GOOD + assert file.visible_health_status == FileSystemItemHealthStatus.NONE action = ( "node_file_scan", diff --git a/tests/integration_tests/game_layer/actions/test_folder_request_permission.py b/tests/integration_tests/game_layer/actions/test_folder_request_permission.py index 9cd4bfcf..207f7d48 100644 --- a/tests/integration_tests/game_layer/actions/test_folder_request_permission.py +++ b/tests/integration_tests/game_layer/actions/test_folder_request_permission.py @@ -52,12 +52,12 @@ def test_folder_scan_action(game_and_agent_fixture: Tuple[PrimaiteGame, ProxyAge folder = client_1.file_system.get_folder(folder_name="downloads") assert folder.health_status == FileSystemItemHealthStatus.GOOD - assert folder.visible_health_status == FileSystemItemHealthStatus.GOOD + assert folder.visible_health_status == FileSystemItemHealthStatus.NONE folder.corrupt() assert folder.health_status == FileSystemItemHealthStatus.CORRUPT - assert folder.visible_health_status == FileSystemItemHealthStatus.GOOD + assert folder.visible_health_status == FileSystemItemHealthStatus.NONE action = ( "node_folder_scan", diff --git a/tests/integration_tests/game_layer/observations/test_file_system_observations.py b/tests/integration_tests/game_layer/observations/test_file_system_observations.py index 0268cb95..19c0c4bc 100644 --- a/tests/integration_tests/game_layer/observations/test_file_system_observations.py +++ b/tests/integration_tests/game_layer/observations/test_file_system_observations.py @@ -32,11 +32,11 @@ def test_file_observation(simulation): assert dog_file_obs.space["health_status"] == spaces.Discrete(6) observation_state = dog_file_obs.observe(simulation.describe_state()) - assert observation_state.get("health_status") == 1 # good initial + assert observation_state.get("health_status") == 0 # initially unset file.corrupt() observation_state = dog_file_obs.observe(simulation.describe_state()) - assert observation_state.get("health_status") == 1 # scan file so this changes + assert observation_state.get("health_status") == 0 # still default unset value because no scan happened file.scan() file.apply_timestep(0) # apply time step @@ -63,11 +63,11 @@ def test_folder_observation(simulation): observation_state = root_folder_obs.observe(simulation.describe_state()) assert observation_state.get("FILES") is not None - assert observation_state.get("health_status") == 1 + assert observation_state.get("health_status") == 0 # initially unset file.corrupt() # corrupt just the file observation_state = root_folder_obs.observe(simulation.describe_state()) - assert observation_state.get("health_status") == 1 # scan folder to change this + assert observation_state.get("health_status") == 0 # still unset as no scan occurred yet folder.scan() for i in range(folder.scan_duration + 1): diff --git a/tests/integration_tests/game_layer/test_actions.py b/tests/integration_tests/game_layer/test_actions.py index 800549bc..5a308cf8 100644 --- a/tests/integration_tests/game_layer/test_actions.py +++ b/tests/integration_tests/game_layer/test_actions.py @@ -275,7 +275,7 @@ def test_node_file_scan_integration(game_and_agent: Tuple[PrimaiteGame, ProxyAge client_1 = game.simulation.network.get_node_by_hostname("client_1") file = client_1.file_system.get_file("downloads", "cat.png") assert file.health_status == FileSystemItemHealthStatus.GOOD - assert file.visible_health_status == FileSystemItemHealthStatus.GOOD + assert file.visible_health_status == FileSystemItemHealthStatus.NONE # 2: perform a scan and make sure nothing has changed action = ( diff --git a/tests/integration_tests/game_layer/test_observations.py b/tests/integration_tests/game_layer/test_observations.py index 23364f13..5afad296 100644 --- a/tests/integration_tests/game_layer/test_observations.py +++ b/tests/integration_tests/game_layer/test_observations.py @@ -17,12 +17,7 @@ def test_file_observation(): dog_file_obs = FileObservation( where=["network", "nodes", pc.hostname, "file_system", "folders", "root", "files", "dog.png"], include_num_access=False, - file_system_requires_scan=True, + file_system_requires_scan=False, ) assert dog_file_obs.observe(state) == {"health_status": 1} assert dog_file_obs.space == spaces.Dict({"health_status": spaces.Discrete(6)}) - - -# TODO: -# def test_file_num_access(): -# ... diff --git a/tests/integration_tests/system/test_database_on_node.py b/tests/integration_tests/system/test_database_on_node.py index 31732f77..bb25f8c8 100644 --- a/tests/integration_tests/system/test_database_on_node.py +++ b/tests/integration_tests/system/test_database_on_node.py @@ -163,7 +163,7 @@ def test_restore_backup_without_updating_scan(uc2_network): db_service.db_file.corrupt() # corrupt the db assert db_service.db_file.health_status == FileSystemItemHealthStatus.CORRUPT # db file is actually corrupt - assert db_service.db_file.visible_health_status == FileSystemItemHealthStatus.GOOD # not scanned yet + assert db_service.db_file.visible_health_status == FileSystemItemHealthStatus.NONE # not scanned yet db_service.db_file.scan() # scan the db file @@ -190,7 +190,7 @@ def test_restore_backup_after_deleting_file_without_updating_scan(uc2_network): db_service.db_file.corrupt() # corrupt the db assert db_service.db_file.health_status == FileSystemItemHealthStatus.CORRUPT # db file is actually corrupt - assert db_service.db_file.visible_health_status == FileSystemItemHealthStatus.GOOD # not scanned yet + assert db_service.db_file.visible_health_status == FileSystemItemHealthStatus.NONE # not scanned yet db_service.db_file.scan() # scan the db file diff --git a/tests/unit_tests/_primaite/_game/_agent/test_observations.py b/tests/unit_tests/_primaite/_game/_agent/test_observations.py index 5170bcf3..5156a29f 100644 --- a/tests/unit_tests/_primaite/_game/_agent/test_observations.py +++ b/tests/unit_tests/_primaite/_game/_agent/test_observations.py @@ -69,8 +69,8 @@ class TestFileSystemRequiresScan: wildcard_list: - 0.0.0.1 port_list: - - 80 - - 5432 + - HTTP + - POSTGRES_SERVER protocol_list: - ICMP - TCP @@ -119,14 +119,20 @@ class TestFileSystemRequiresScan: assert obs_not_requiring_scan.observe(file_state)["health_status"] == 3 def test_folder_require_scan(self): - folder_state = {"health_status": 3, "visible_status": 1} + folder_state = {"health_status": 3, "visible_status": 1, "scanned_this_step": False} obs_requiring_scan = FolderObservation( [], files=[], num_files=0, include_num_access=False, file_system_requires_scan=True ) - assert obs_requiring_scan.observe(folder_state)["health_status"] == 1 + assert obs_requiring_scan.observe(folder_state)["health_status"] == 0 obs_not_requiring_scan = FolderObservation( [], files=[], num_files=0, include_num_access=False, file_system_requires_scan=False ) assert obs_not_requiring_scan.observe(folder_state)["health_status"] == 3 + + folder_state = {"health_status": 3, "visible_status": 1, "scanned_this_step": True} + obs_requiring_scan = FolderObservation( + [], files=[], num_files=0, include_num_access=False, file_system_requires_scan=True + ) + assert obs_requiring_scan.observe(folder_state)["health_status"] == 1 diff --git a/tests/unit_tests/_primaite/_simulator/_file_system/test_file.py b/tests/unit_tests/_primaite/_simulator/_file_system/test_file.py index 9cacdccf..9691080d 100644 --- a/tests/unit_tests/_primaite/_simulator/_file_system/test_file.py +++ b/tests/unit_tests/_primaite/_simulator/_file_system/test_file.py @@ -22,12 +22,12 @@ def test_file_scan(file_system): file: File = file_system.create_file(file_name="test_file.txt", folder_name="test_folder") assert file.health_status == FileSystemItemHealthStatus.GOOD - assert file.visible_health_status == FileSystemItemHealthStatus.GOOD + assert file.visible_health_status == FileSystemItemHealthStatus.NONE file.corrupt() assert file.health_status == FileSystemItemHealthStatus.CORRUPT - assert file.visible_health_status == FileSystemItemHealthStatus.GOOD + assert file.visible_health_status == FileSystemItemHealthStatus.NONE file.scan() diff --git a/tests/unit_tests/_primaite/_simulator/_file_system/test_file_actions.py b/tests/unit_tests/_primaite/_simulator/_file_system/test_file_actions.py index 2729e5e4..59f3f000 100644 --- a/tests/unit_tests/_primaite/_simulator/_file_system/test_file_actions.py +++ b/tests/unit_tests/_primaite/_simulator/_file_system/test_file_actions.py @@ -24,7 +24,7 @@ def test_file_scan_request(populated_file_system): file.corrupt() assert file.health_status == FileSystemItemHealthStatus.CORRUPT - assert file.visible_health_status == FileSystemItemHealthStatus.GOOD + assert file.visible_health_status == FileSystemItemHealthStatus.NONE fs.apply_request(request=["folder", folder.name, "file", file.name, "scan"]) @@ -94,7 +94,7 @@ def test_deleted_file_cannot_be_interacted_with(populated_file_system): assert fs.get_file(folder_name=folder.name, file_name=file.name).health_status == FileSystemItemHealthStatus.CORRUPT assert ( fs.get_file(folder_name=folder.name, file_name=file.name).visible_health_status - == FileSystemItemHealthStatus.GOOD + == FileSystemItemHealthStatus.NONE ) fs.apply_request(request=["delete", "file", folder.name, file.name]) diff --git a/tests/unit_tests/_primaite/_simulator/_file_system/test_folder.py b/tests/unit_tests/_primaite/_simulator/_file_system/test_folder.py index 10393c6c..b5d9b269 100644 --- a/tests/unit_tests/_primaite/_simulator/_file_system/test_folder.py +++ b/tests/unit_tests/_primaite/_simulator/_file_system/test_folder.py @@ -44,25 +44,25 @@ def test_folder_scan(file_system): file2: File = folder.get_file_by_id(file_uuid=list(folder.files)[0]) assert folder.health_status == FileSystemItemHealthStatus.GOOD - assert folder.visible_health_status == FileSystemItemHealthStatus.GOOD - assert file1.visible_health_status == FileSystemItemHealthStatus.GOOD - assert file2.visible_health_status == FileSystemItemHealthStatus.GOOD + assert folder.visible_health_status == FileSystemItemHealthStatus.NONE + assert file1.visible_health_status == FileSystemItemHealthStatus.NONE + assert file2.visible_health_status == FileSystemItemHealthStatus.NONE folder.corrupt() assert folder.health_status == FileSystemItemHealthStatus.CORRUPT - assert folder.visible_health_status == FileSystemItemHealthStatus.GOOD - assert file1.visible_health_status == FileSystemItemHealthStatus.GOOD - assert file2.visible_health_status == FileSystemItemHealthStatus.GOOD + assert folder.visible_health_status == FileSystemItemHealthStatus.NONE + assert file1.visible_health_status == FileSystemItemHealthStatus.NONE + assert file2.visible_health_status == FileSystemItemHealthStatus.NONE folder.scan() folder.apply_timestep(timestep=0) assert folder.health_status == FileSystemItemHealthStatus.CORRUPT - assert folder.visible_health_status == FileSystemItemHealthStatus.GOOD - assert file1.visible_health_status == FileSystemItemHealthStatus.GOOD - assert file2.visible_health_status == FileSystemItemHealthStatus.GOOD + assert folder.visible_health_status == FileSystemItemHealthStatus.NONE + assert file1.visible_health_status == FileSystemItemHealthStatus.NONE + assert file2.visible_health_status == FileSystemItemHealthStatus.NONE folder.apply_timestep(timestep=1) folder.apply_timestep(timestep=2) diff --git a/tests/unit_tests/_primaite/_simulator/_file_system/test_folder_actions.py b/tests/unit_tests/_primaite/_simulator/_file_system/test_folder_actions.py index 07c1ec46..72857638 100644 --- a/tests/unit_tests/_primaite/_simulator/_file_system/test_folder_actions.py +++ b/tests/unit_tests/_primaite/_simulator/_file_system/test_folder_actions.py @@ -29,18 +29,18 @@ def test_folder_scan_request(populated_file_system): folder.corrupt() assert folder.health_status == FileSystemItemHealthStatus.CORRUPT - assert folder.visible_health_status == FileSystemItemHealthStatus.GOOD - assert file1.visible_health_status == FileSystemItemHealthStatus.GOOD - assert file2.visible_health_status == FileSystemItemHealthStatus.GOOD + assert folder.visible_health_status == FileSystemItemHealthStatus.NONE + assert file1.visible_health_status == FileSystemItemHealthStatus.NONE + assert file2.visible_health_status == FileSystemItemHealthStatus.NONE fs.apply_request(request=["folder", folder.name, "scan"]) folder.apply_timestep(timestep=0) assert folder.health_status == FileSystemItemHealthStatus.CORRUPT - assert folder.visible_health_status == FileSystemItemHealthStatus.GOOD - assert file1.visible_health_status == FileSystemItemHealthStatus.GOOD - assert file2.visible_health_status == FileSystemItemHealthStatus.GOOD + assert folder.visible_health_status == FileSystemItemHealthStatus.NONE + assert file1.visible_health_status == FileSystemItemHealthStatus.NONE + assert file2.visible_health_status == FileSystemItemHealthStatus.NONE folder.apply_timestep(timestep=1) folder.apply_timestep(timestep=2) diff --git a/tests/unit_tests/_primaite/_simulator/_network/_hardware/test_node_actions.py b/tests/unit_tests/_primaite/_simulator/_network/_hardware/test_node_actions.py index 605f8c3b..672a4b5f 100644 --- a/tests/unit_tests/_primaite/_simulator/_network/_hardware/test_node_actions.py +++ b/tests/unit_tests/_primaite/_simulator/_network/_hardware/test_node_actions.py @@ -70,13 +70,13 @@ def test_node_os_scan(node): # add folder and file to node folder: Folder = node.file_system.create_folder(folder_name="test_folder") folder.corrupt() - assert folder.visible_health_status == FileSystemItemHealthStatus.GOOD + assert folder.visible_health_status == FileSystemItemHealthStatus.NONE file: File = node.file_system.create_file(folder_name="test_folder", file_name="file.txt") file2: File = node.file_system.create_file(folder_name="test_folder", file_name="file2.txt") file.corrupt() file2.corrupt() - assert file.visible_health_status == FileSystemItemHealthStatus.GOOD + assert file.visible_health_status == FileSystemItemHealthStatus.NONE # run os scan node.apply_request(["os", "scan"])