From dc81ee71ea24044687ad4e23b7acdd8eb674d863 Mon Sep 17 00:00:00 2001 From: Juan Leaniz Date: Fri, 13 Oct 2023 14:44:56 -0500 Subject: [PATCH 01/10] Update README.md (#1377) Fix extra parenthesis in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6a15f3fb6..ecbec15dc 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ Commands: submit Submit new requests to the Turbinia API server. ``` -Check out the `turbinia-client` documentation [page]((https://turbinia.readthedocs.io/en/latest/user/turbinia-client.html#turbinia-api-cli-tool-turbinia-client)) for a detailed user guide. +Check out the `turbinia-client` documentation [page](https://turbinia.readthedocs.io/en/latest/user/turbinia-client.html#turbinia-api-cli-tool-turbinia-client) for a detailed user guide. You can also interact with Turbinia directly from Python by using the API library. We provide some examples [here](https://github.com/google/turbinia/tree/master/turbinia/api/client) From 41f3face9399d2fb12020228d522619e38a0edf9 Mon Sep 17 00:00:00 2001 From: Aaron Peterson Date: Mon, 16 Oct 2023 18:06:13 +0200 Subject: [PATCH 02/10] Fix SSH Task and other required states (#1368) * Fix task required states * fix path_specs def * Update mount requirements * Fix required states --- turbinia/evidence.py | 19 ++++++------ turbinia/workers/analysis/jenkins.py | 1 + turbinia/workers/analysis/jupyter.py | 3 +- turbinia/workers/analysis/linux_acct.py | 1 + turbinia/workers/analysis/ssh_analyzer.py | 31 ++++++++++--------- turbinia/workers/analysis/windows_acct.py | 1 + turbinia/workers/analysis/wordpress_access.py | 3 +- turbinia/workers/analysis/wordpress_creds.py | 1 + turbinia/workers/redis.py | 3 +- turbinia/workers/sshd.py | 3 +- turbinia/workers/tomcat.py | 3 +- 11 files changed, 40 insertions(+), 29 deletions(-) diff --git a/turbinia/evidence.py b/turbinia/evidence.py index 87403b0fa..b846bca27 100644 --- a/turbinia/evidence.py +++ b/turbinia/evidence.py @@ -363,7 +363,7 @@ def from_dict(cls, dictionary): def serialize_attribute(self, name: str) -> str: """Returns JSON serialized attribute. - + Args: name(str): the name of the attribute that will be serialized. Returns: @@ -381,7 +381,7 @@ def serialize(self, json_values: bool = False): """Returns a JSON serialized object. The function will return A string containing the serialized evidence_dict or a dict of serialized attributes if json_values is true. - + Args: json_values(bool): Returns only values of the dictionary as json strings instead of the entire dictionary. @@ -600,7 +600,7 @@ def format_state(self): def _validate(self): """Runs additional logic to validate evidence requirements. - + Evidence subclasses can override this method to perform custom validation of evidence objects. """ @@ -840,6 +840,7 @@ def _preprocess(self, _, required_states): # We need to enumerate partitions in preprocessing so the path_specs match # the parent evidence location for each task. + path_specs = None try: # We should only get one path_spec here since we're specifying the location. path_specs = partitions.Enumerate( @@ -847,20 +848,20 @@ def _preprocess(self, _, required_states): except TurbiniaException as exception: log.error(exception) - if len(path_specs) > 1: + if not path_specs: + raise TurbiniaException( + f'Could not find path_spec for location {self.partition_location:s}') + elif path_specs and len(path_specs) > 1: path_specs_dicts = [path_spec.CopyToDict() for path_spec in path_specs] raise TurbiniaException( 'Found more than one path_spec for {0:s} {1:s}: {2!s}'.format( self.parent_evidence.name, self.partition_location, path_specs_dicts)) - elif len(path_specs) == 1: + elif path_specs and len(path_specs) == 1: self.path_spec = path_specs[0] log.debug( 'Found path_spec {0!s} for parent evidence {1:s}'.format( self.path_spec.CopyToDict(), self.parent_evidence.name)) - else: - raise TurbiniaException( - f'Could not find path_spec for location {self.partition_location:s}') # In attaching a partition, we create a new loopback device using the # partition offset and size. @@ -1051,7 +1052,7 @@ def __init__(self, plaso_version=None, *args, **kwargs): def _validate(self): """Validates whether the Plaso file contains any events. - + Raises: TurbiniaException: if validation fails. """ diff --git a/turbinia/workers/analysis/jenkins.py b/turbinia/workers/analysis/jenkins.py index d6d14594b..fbe9acf8a 100644 --- a/turbinia/workers/analysis/jenkins.py +++ b/turbinia/workers/analysis/jenkins.py @@ -32,6 +32,7 @@ class JenkinsAnalysisTask(TurbiniaTask): """Task to analyze a Jenkins install.""" + # Does not need to be MOUNTED as this Task uses extract_files() REQUIRED_STATES = [state.ATTACHED, state.CONTAINER_MOUNTED] TASK_CONFIG = { diff --git a/turbinia/workers/analysis/jupyter.py b/turbinia/workers/analysis/jupyter.py index e438417c1..ad7f3c820 100644 --- a/turbinia/workers/analysis/jupyter.py +++ b/turbinia/workers/analysis/jupyter.py @@ -30,7 +30,8 @@ class JupyterAnalysisTask(TurbiniaTask): """Task to analyze a Jupyter Notebook config.""" - REQUIRED_STATES = [state.ATTACHED, state.CONTAINER_MOUNTED] + # Input Evidence is ExportedFileArtifact so does not need to be pre-processed. + REQUIRED_STATES = [] def run(self, evidence, result): """Run the Jupyter worker. diff --git a/turbinia/workers/analysis/linux_acct.py b/turbinia/workers/analysis/linux_acct.py index f758b4518..3f37809f1 100644 --- a/turbinia/workers/analysis/linux_acct.py +++ b/turbinia/workers/analysis/linux_acct.py @@ -30,6 +30,7 @@ class LinuxAccountAnalysisTask(TurbiniaTask): """Task to analyze a Linux password file.""" + # Does not need to be MOUNTED as this Task uses extract_artifacts() REQUIRED_STATES = [ state.ATTACHED, state.CONTAINER_MOUNTED, state.DECOMPRESSED ] diff --git a/turbinia/workers/analysis/ssh_analyzer.py b/turbinia/workers/analysis/ssh_analyzer.py index 949fa418f..d21d1559c 100644 --- a/turbinia/workers/analysis/ssh_analyzer.py +++ b/turbinia/workers/analysis/ssh_analyzer.py @@ -64,7 +64,7 @@ def __init__( def calculate_session_id(self) -> None: """Calculates pseudo session_id for SSH login. - The pseudo session_id is based on date, hostname, username, source_ip, + The pseudo session_id is based on date, hostname, username, source_ip, and source_port. """ # TODO(rmaskey): Find a better way to generate pseudo session_id. Current @@ -81,7 +81,8 @@ def calculate_session_id(self) -> None: class LinuxSSHAnalysisTask(TurbiniaTask): """Task to analyze Linux SSH authentication.""" - REQUIRED_STATES = [state.MOUNTED, state.CONTAINER_MOUNTED] + # Does not need to be MOUNTED as this Task uses extract_artifacts() + REQUIRED_STATES = [state.ATTACHED, state.CONTAINER_MOUNTED] # Log year validation # The minimum supported log year @@ -150,10 +151,10 @@ class LinuxSSHAnalysisTask(TurbiniaTask): def read_logs(self, log_dir: str) -> pd.DataFrame: """Reads SSH logs directory and returns Pandas dataframe. - + Args: log_dir (str): Directory containing SSH authentication log. - + Returns: pd.DataFrame: Returns Pandas dataframe. """ @@ -226,12 +227,12 @@ def read_logs(self, log_dir: str) -> pd.DataFrame: def parse_message_datetime( self, message_datetime: List, log_year: int) -> datetime: """Parses and returns datetime. - + Args: message_datetime (List[str]): A list containing syslog datetime separated by spaces e.g. Feb 8 13:30:45 for Debian, and Red Hat, and 2023-02-08T13:30:45.123456+11:00 for OpenSUSE. - log_year (int): A user provided log year for SSH events. The log year is + log_year (int): A user provided log year for SSH events. The log year is not captured by syslog and this is either provided by user or guessed based on the last SSH event and current date/time. @@ -261,14 +262,14 @@ def parse_message_datetime( def read_log_data(self, data, log_filename: str, log_year: int = None) -> List[SSHEventData]: """Parses SSH log data and returns a list of SSHEventData. - + Args: data (str): Content of authentication log file. log_filename (str): Name of the log file whose content is read. log_year (int): SSH authentication log year. - + Returns: - List(SSHEventData): Returns SSH events as list of SSHEventData. + List(SSHEventData): Returns SSH events as list of SSHEventData. """ # check valid year is provided # If valid year isn't provided raise error @@ -356,10 +357,10 @@ def read_log_data(self, data, log_filename: str, def get_priority_value(self, priority_string: str) -> Priority: """Returns priority value. - + Args: priority_string (str): Priority values as string e.g. HIGH, MEDIUM, LOW - + Returns: Priority: Returns priority value of priority_string. """ @@ -374,15 +375,15 @@ def get_priority_value(self, priority_string: str) -> Priority: def brute_force_analysis(self, df: pd.DataFrame) -> Tuple[Priority, str, str]: """Runs brute force analysis. - + Args: df (pd.DataFrame): Pandas dataframe of SSH events. - + Returns: Tuple[Priority, str, str]: Returns brute force analysis result as tuple. Priority: Priority of the findings. str: Brief summary of the findings. - str: Detailed information as markdown. + str: Detailed information as markdown. """ bfa = BruteForceAnalyzer() @@ -416,7 +417,7 @@ def run( Args: evidence (Evidence object): The evidence being processed by analyzer. result (TurbiniaTaskResult): The object to place task results into. - + Returns: TurbiniaTaskResult object. """ diff --git a/turbinia/workers/analysis/windows_acct.py b/turbinia/workers/analysis/windows_acct.py index 93d369c0b..9dbc4b6f1 100644 --- a/turbinia/workers/analysis/windows_acct.py +++ b/turbinia/workers/analysis/windows_acct.py @@ -29,6 +29,7 @@ class WindowsAccountAnalysisTask(TurbiniaTask): """Task to analyze Windows accounts.""" + # Does not need to be MOUNTED as this Task uses extract_artifacts() REQUIRED_STATES = [ state.ATTACHED, state.CONTAINER_MOUNTED, state.DECOMPRESSED ] diff --git a/turbinia/workers/analysis/wordpress_access.py b/turbinia/workers/analysis/wordpress_access.py index 461b50a72..c6f4e25cf 100644 --- a/turbinia/workers/analysis/wordpress_access.py +++ b/turbinia/workers/analysis/wordpress_access.py @@ -30,7 +30,8 @@ class WordpressAccessLogAnalysisTask(TurbiniaTask): """Task to analyze Wordpress access logs.""" - REQUIRED_STATES = [state.ATTACHED, state.CONTAINER_MOUNTED] + # Input Evidence is ExportedFileArtifact so does not need to be preprocessed. + REQUIRED_STATES = [] timestamp_regex = re.compile(r'\[(?P.+)\]') diff --git a/turbinia/workers/analysis/wordpress_creds.py b/turbinia/workers/analysis/wordpress_creds.py index d854b9e80..930584b67 100644 --- a/turbinia/workers/analysis/wordpress_creds.py +++ b/turbinia/workers/analysis/wordpress_creds.py @@ -34,6 +34,7 @@ class WordpressCredsAnalysisTask(TurbiniaTask): """Task to analyze the credentials of a Wordpress instance.""" + # Does not need to be MOUNTED as uses extract_files() REQUIRED_STATES = [ state.ATTACHED, state.CONTAINER_MOUNTED, state.DECOMPRESSED ] diff --git a/turbinia/workers/redis.py b/turbinia/workers/redis.py index f5292bcc7..98b16dd2f 100644 --- a/turbinia/workers/redis.py +++ b/turbinia/workers/redis.py @@ -29,7 +29,8 @@ class RedisAnalysisTask(TurbiniaTask): """Task to analyze a Redis configuration file.""" - REQUIRED_STATES = [state.ATTACHED, state.CONTAINER_MOUNTED] + # Input Evidence is ExportedFileArtifact so does not need to be pre-processed. + REQUIRED_STATES = [] def run(self, evidence, result): """Run the Redis configuration analysis worker. diff --git a/turbinia/workers/sshd.py b/turbinia/workers/sshd.py index e98f445c7..130b88283 100644 --- a/turbinia/workers/sshd.py +++ b/turbinia/workers/sshd.py @@ -29,7 +29,8 @@ class SSHDAnalysisTask(TurbiniaTask): """Task to analyze a sshd_config file.""" - REQUIRED_STATES = [state.ATTACHED, state.CONTAINER_MOUNTED] + # Input Evidence is ExportedFileArtifact so does not need to be pre-processed. + REQUIRED_STATES = [] def run(self, evidence, result): """Run the sshd_config analysis worker. diff --git a/turbinia/workers/tomcat.py b/turbinia/workers/tomcat.py index eac91b62b..5abb1e06d 100644 --- a/turbinia/workers/tomcat.py +++ b/turbinia/workers/tomcat.py @@ -29,7 +29,8 @@ class TomcatAnalysisTask(TurbiniaTask): """Task to analyze a Tomcat file.""" - REQUIRED_STATES = [state.ATTACHED, state.CONTAINER_MOUNTED] + # Input Evidence is ExportedFileArtifact so does not need to be pre-processed. + REQUIRED_STATES = [] def run(self, evidence, result): """Run the Tomcat analysis worker. From 0c9ca231cffdeca2214637a1b154ee13a60aa72e Mon Sep 17 00:00:00 2001 From: Juan Leaniz Date: Mon, 16 Oct 2023 11:30:11 -0500 Subject: [PATCH 03/10] Remove unused autogen tests and add cli tests (#1371) * Remove unused autogen tests and add cli tests * Update dependency * Updates to gh actions --- .github/workflows/actions.yml | 2 + run_tests.py | 2 + .../cli/turbinia_client/turbiniacli_test.py | 9 ++- turbinia/api/client/test/__init__.py | 0 .../client/test/test_base_request_options.py | 35 --------- ...pload_evidence_api_evidence_upload_post.py | 58 -------------- .../test/test_complete_turbinia_stats.py | 67 ----------------- .../client/test/test_http_validation_error.py | 37 --------- .../api/client/test/test_location_inner.py | 51 ------------- .../api/client/test/test_models/__init__.py | 0 .../test_models/test_base_request_options.py | 25 ------- .../test_complete_turbinia_stats.py | 25 ------- .../test_models/test_http_validation_error.py | 25 ------- .../client/test/test_models/test_request.py | 25 ------- .../test/test_models/test_validation_error.py | 25 ------- .../api/client/test/test_paths/__init__.py | 68 ----------------- .../test_paths/test_api_config_/__init__.py | 0 .../test_paths/test_api_config_/test_get.py | 41 ---------- .../__init__.py | 0 .../test_get.py | 41 ---------- .../test_api_evidence_evidence_id/__init__.py | 0 .../test_api_evidence_evidence_id/test_get.py | 41 ---------- .../test_api_evidence_query/__init__.py | 0 .../test_api_evidence_query/test_get.py | 41 ---------- .../test_api_evidence_summary/__init__.py | 0 .../test_api_evidence_summary/test_get.py | 41 ---------- .../test_api_evidence_types/__init__.py | 0 .../test_api_evidence_types/test_get.py | 41 ---------- .../__init__.py | 0 .../test_get.py | 41 ---------- .../test_api_evidence_upload/__init__.py | 0 .../test_api_evidence_upload/test_post.py | 41 ---------- .../test_paths/test_api_jobs_/__init__.py | 0 .../test_paths/test_api_jobs_/test_get.py | 41 ---------- .../test_api_logs_query/__init__.py | 0 .../test_api_logs_query/test_get.py | 41 ---------- .../test_paths/test_api_request_/__init__.py | 0 .../test_paths/test_api_request_/test_post.py | 43 ----------- .../test_api_request_request_id/__init__.py | 0 .../test_api_request_request_id/test_get.py | 41 ---------- .../test_api_request_summary/__init__.py | 0 .../test_api_request_summary/test_get.py | 41 ---------- .../__init__.py | 0 .../test_get.py | 41 ---------- .../test_api_result_task_task_id/__init__.py | 0 .../test_api_result_task_task_id/test_get.py | 41 ---------- .../test_api_task_statistics/__init__.py | 0 .../test_api_task_statistics/test_get.py | 41 ---------- .../test_api_task_task_id/__init__.py | 0 .../test_api_task_task_id/test_get.py | 41 ---------- .../test_api_task_workers/__init__.py | 0 .../test_api_task_workers/test_get.py | 41 ---------- turbinia/api/client/test/test_request.py | 37 --------- .../test/test_turbinia_configuration_api.py | 56 -------------- .../client/test/test_turbinia_evidence_api.py | 75 ------------------- .../api/client/test/test_turbinia_jobs_api.py | 35 --------- .../api/client/test/test_turbinia_logs_api.py | 35 --------- .../test/test_turbinia_request_results_api.py | 42 ----------- .../client/test/test_turbinia_requests_api.py | 49 ------------ .../client/test/test_turbinia_tasks_api.py | 35 --------- .../api/client/test/test_validation_error.py | 37 --------- .../test/test_validation_error_loc_inner.py | 35 --------- 62 files changed, 10 insertions(+), 1620 deletions(-) delete mode 100644 turbinia/api/client/test/__init__.py delete mode 100644 turbinia/api/client/test/test_base_request_options.py delete mode 100644 turbinia/api/client/test/test_body_upload_evidence_api_evidence_upload_post.py delete mode 100644 turbinia/api/client/test/test_complete_turbinia_stats.py delete mode 100644 turbinia/api/client/test/test_http_validation_error.py delete mode 100644 turbinia/api/client/test/test_location_inner.py delete mode 100644 turbinia/api/client/test/test_models/__init__.py delete mode 100644 turbinia/api/client/test/test_models/test_base_request_options.py delete mode 100644 turbinia/api/client/test/test_models/test_complete_turbinia_stats.py delete mode 100644 turbinia/api/client/test/test_models/test_http_validation_error.py delete mode 100644 turbinia/api/client/test/test_models/test_request.py delete mode 100644 turbinia/api/client/test/test_models/test_validation_error.py delete mode 100644 turbinia/api/client/test/test_paths/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_config_/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_config_/test_get.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_config_request_options/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_config_request_options/test_get.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_evidence_evidence_id/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_evidence_evidence_id/test_get.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_evidence_query/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_evidence_query/test_get.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_evidence_summary/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_evidence_summary/test_get.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_evidence_types/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_evidence_types/test_get.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_evidence_types_evidence_type/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_evidence_types_evidence_type/test_get.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_evidence_upload/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_evidence_upload/test_post.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_jobs_/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_jobs_/test_get.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_logs_query/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_logs_query/test_get.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_request_/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_request_/test_post.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_request_request_id/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_request_request_id/test_get.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_request_summary/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_request_summary/test_get.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_result_request_request_id/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_result_request_request_id/test_get.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_result_task_task_id/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_result_task_task_id/test_get.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_task_statistics/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_task_statistics/test_get.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_task_task_id/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_task_task_id/test_get.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_task_workers/__init__.py delete mode 100644 turbinia/api/client/test/test_paths/test_api_task_workers/test_get.py delete mode 100644 turbinia/api/client/test/test_request.py delete mode 100644 turbinia/api/client/test/test_turbinia_configuration_api.py delete mode 100644 turbinia/api/client/test/test_turbinia_evidence_api.py delete mode 100644 turbinia/api/client/test/test_turbinia_jobs_api.py delete mode 100644 turbinia/api/client/test/test_turbinia_logs_api.py delete mode 100644 turbinia/api/client/test/test_turbinia_request_results_api.py delete mode 100644 turbinia/api/client/test/test_turbinia_requests_api.py delete mode 100644 turbinia/api/client/test/test_turbinia_tasks_api.py delete mode 100644 turbinia/api/client/test/test_validation_error.py delete mode 100644 turbinia/api/client/test/test_validation_error_loc_inner.py diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index d01294b47..5c4ccc455 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -31,6 +31,8 @@ jobs: - name: Install and configure test dependencies run: | docker exec -u root -t turbinia-worker bash -c "/usr/bin/python -m pip install --quiet --upgrade pip" + docker exec -u root -t turbinia-worker bash -c "cd /tmp/turbinia/api/client && /usr/bin/python -m pip install --quiet ." + docker exec -u root -t turbinia-worker bash -c "/usr/bin/python -m pip install --quiet -r /tmp/turbinia/api/cli/requirements.txt" docker exec -u root -t turbinia-worker bash -c "/usr/bin/python -m pip install --quiet mock nose coverage yapf" docker exec -u root -t turbinia-worker bash -c "/usr/bin/python -m pip install --quiet tox" - name: Run Tests diff --git a/run_tests.py b/run_tests.py index 0921d1c8a..f7dc44d04 100755 --- a/run_tests.py +++ b/run_tests.py @@ -20,6 +20,8 @@ if __name__ == '__main__': test_suite = unittest.TestLoader().discover('turbinia', pattern='*_test.py') + test_suite.addTests( + unittest.TestLoader().discover('turbinia/api/cli', pattern='*_test.py')) test_results = unittest.TextTestRunner(verbosity=2).run(test_suite) if not test_results.wasSuccessful(): sys.exit(1) diff --git a/turbinia/api/cli/turbinia_client/turbiniacli_test.py b/turbinia/api/cli/turbinia_client/turbiniacli_test.py index edc95b323..cbc9ba273 100644 --- a/turbinia/api/cli/turbinia_client/turbiniacli_test.py +++ b/turbinia/api/cli/turbinia_client/turbiniacli_test.py @@ -16,6 +16,7 @@ import unittest import mock +import pathlib from turbinia_client.turbiniacli import TurbiniaCli from fastapi.testclient import TestClient @@ -29,7 +30,9 @@ class TestTurbiniaCli(unittest.TestCase): def setUp(self) -> None: """Sets up the client for the tests.""" self.api_client = TestClient(app) - self.client = TurbiniaCli(config_instance='default', config_path='../') + config_path = pathlib.Path(__file__).parent.parent + self.client = TurbiniaCli( + config_instance='default', config_path=config_path) def testInitialization(self) -> None: """Tests if the client was initialized properly.""" @@ -46,11 +49,11 @@ def testReadConfiguration(self) -> None: self.assertIn('CREDENTIALS_FILENAME', self.client.config_dict) @mock.patch( - 'turbinia_api_lib.api.turbinia_configuration_api.TurbiniaConfigurationApi.get_evidence_types' + 'turbinia_api_lib.api.turbinia_evidence_api.TurbiniaEvidenceApi.get_evidence_types' ) def testGetEvidenceArguments(self, mock_response) -> None: """Tests the get_evidence_arguments method.""" - test_response = self.api_client.get('/api/config/evidence') + test_response = self.api_client.get('/api/evidence/types') mock_response.return_value = test_response api_response = self.client.get_evidence_arguments() self.assertEqual(test_response, api_response) diff --git a/turbinia/api/client/test/__init__.py b/turbinia/api/client/test/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_base_request_options.py b/turbinia/api/client/test/test_base_request_options.py deleted file mode 100644 index aa345734e..000000000 --- a/turbinia/api/client/test/test_base_request_options.py +++ /dev/null @@ -1,35 +0,0 @@ -""" - Turbinia API Server - - Turbinia API server # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by: https://openapi-generator.tech -""" - - -import sys -import unittest - -import turbinia_api_lib -from turbinia_api_lib.model.base_request_options import BaseRequestOptions - - -class TestBaseRequestOptions(unittest.TestCase): - """BaseRequestOptions unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testBaseRequestOptions(self): - """Test BaseRequestOptions""" - # FIXME: construct object with mandatory attributes with example values - # model = BaseRequestOptions() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_body_upload_evidence_api_evidence_upload_post.py b/turbinia/api/client/test/test_body_upload_evidence_api_evidence_upload_post.py deleted file mode 100644 index e752e54dd..000000000 --- a/turbinia/api/client/test/test_body_upload_evidence_api_evidence_upload_post.py +++ /dev/null @@ -1,58 +0,0 @@ -# coding: utf-8 - -""" - Turbinia API Server - - Turbinia API server - - The version of the OpenAPI document: 1.0.0 - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -import unittest -import datetime - -import turbinia_api_lib -from turbinia_api_lib.models.body_upload_evidence_api_evidence_upload_post import BodyUploadEvidenceApiEvidenceUploadPost # noqa: E501 -from turbinia_api_lib.rest import ApiException - -class TestBodyUploadEvidenceApiEvidenceUploadPost(unittest.TestCase): - """BodyUploadEvidenceApiEvidenceUploadPost unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def make_instance(self, include_optional): - """Test BodyUploadEvidenceApiEvidenceUploadPost - include_option is a boolean, when False only required - params are included, when True both required and - optional params are included """ - # uncomment below to create an instance of `BodyUploadEvidenceApiEvidenceUploadPost` - """ - model = turbinia_api_lib.models.body_upload_evidence_api_evidence_upload_post.BodyUploadEvidenceApiEvidenceUploadPost() # noqa: E501 - if include_optional : - return BodyUploadEvidenceApiEvidenceUploadPost( - calculate_hash = None, - files = None, - ticket_id = None - ) - else : - return BodyUploadEvidenceApiEvidenceUploadPost( - files = None, - ticket_id = None, - ) - """ - - def testBodyUploadEvidenceApiEvidenceUploadPost(self): - """Test BodyUploadEvidenceApiEvidenceUploadPost""" - # inst_req_only = self.make_instance(include_optional=False) - # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_complete_turbinia_stats.py b/turbinia/api/client/test/test_complete_turbinia_stats.py deleted file mode 100644 index b7b6ccf01..000000000 --- a/turbinia/api/client/test/test_complete_turbinia_stats.py +++ /dev/null @@ -1,67 +0,0 @@ -# coding: utf-8 - -""" - Turbinia API Server - - Turbinia API server # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" - - -import unittest -import datetime - -import turbinia_api_lib -from turbinia_api_lib.models.complete_turbinia_stats import CompleteTurbiniaStats # noqa: E501 -from turbinia_api_lib.rest import ApiException - -class TestCompleteTurbiniaStats(unittest.TestCase): - """CompleteTurbiniaStats unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def make_instance(self, include_optional): - """Test CompleteTurbiniaStats - include_option is a boolean, when False only required - params are included, when True both required and - optional params are included """ - # uncomment below to create an instance of `CompleteTurbiniaStats` - """ - model = turbinia_api_lib.models.complete_turbinia_stats.CompleteTurbiniaStats() # noqa: E501 - if include_optional : - return CompleteTurbiniaStats( - all_tasks = None, - failed_tasks = None, - requests = None, - successful_tasks = None, - tasks_per_type = None, - tasks_per_user = None, - tasks_per_worker = None - ) - else : - return CompleteTurbiniaStats( - all_tasks = None, - failed_tasks = None, - requests = None, - successful_tasks = None, - tasks_per_type = None, - tasks_per_user = None, - tasks_per_worker = None, - ) - """ - - def testCompleteTurbiniaStats(self): - """Test CompleteTurbiniaStats""" - # inst_req_only = self.make_instance(include_optional=False) - # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_http_validation_error.py b/turbinia/api/client/test/test_http_validation_error.py deleted file mode 100644 index 80b26501f..000000000 --- a/turbinia/api/client/test/test_http_validation_error.py +++ /dev/null @@ -1,37 +0,0 @@ -""" - Turbinia API Server - - Turbinia API server # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by: https://openapi-generator.tech -""" - - -import sys -import unittest - -import turbinia_api_lib -from turbinia_api_lib.model.validation_error import ValidationError -globals()['ValidationError'] = ValidationError -from turbinia_api_lib.model.http_validation_error import HTTPValidationError - - -class TestHTTPValidationError(unittest.TestCase): - """HTTPValidationError unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testHTTPValidationError(self): - """Test HTTPValidationError""" - # FIXME: construct object with mandatory attributes with example values - # model = HTTPValidationError() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_location_inner.py b/turbinia/api/client/test/test_location_inner.py deleted file mode 100644 index 8c845e04b..000000000 --- a/turbinia/api/client/test/test_location_inner.py +++ /dev/null @@ -1,51 +0,0 @@ -# coding: utf-8 - -""" - Turbinia API Server - - Turbinia is an open-source framework for deploying,managing, and running distributed forensic workloads - - The version of the OpenAPI document: 1.0.0 - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -import unittest -import datetime - -from turbinia_api_lib.models.location_inner import LocationInner # noqa: E501 - -class TestLocationInner(unittest.TestCase): - """LocationInner unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def make_instance(self, include_optional) -> LocationInner: - """Test LocationInner - include_option is a boolean, when False only required - params are included, when True both required and - optional params are included """ - # uncomment below to create an instance of `LocationInner` - """ - model = LocationInner() # noqa: E501 - if include_optional: - return LocationInner( - ) - else: - return LocationInner( - ) - """ - - def testLocationInner(self): - """Test LocationInner""" - # inst_req_only = self.make_instance(include_optional=False) - # inst_req_and_optional = self.make_instance(include_optional=True) - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_models/__init__.py b/turbinia/api/client/test/test_models/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_models/test_base_request_options.py b/turbinia/api/client/test/test_models/test_base_request_options.py deleted file mode 100644 index 745ef6f17..000000000 --- a/turbinia/api/client/test/test_models/test_base_request_options.py +++ /dev/null @@ -1,25 +0,0 @@ -# coding: utf-8 - -""" - Turbinia API Server - - Turbinia is an open-source framework for deploying,managing, and running distributed forensic workloads # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by: https://openapi-generator.tech -""" - -import unittest - -import turbinia_api_lib -from turbinia_api_lib.model.base_request_options import BaseRequestOptions -from turbinia_api_lib import configuration - - -class TestBaseRequestOptions(unittest.TestCase): - """BaseRequestOptions unit test stubs""" - _configuration = configuration.Configuration() - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_models/test_complete_turbinia_stats.py b/turbinia/api/client/test/test_models/test_complete_turbinia_stats.py deleted file mode 100644 index 3bbb25c16..000000000 --- a/turbinia/api/client/test/test_models/test_complete_turbinia_stats.py +++ /dev/null @@ -1,25 +0,0 @@ -# coding: utf-8 - -""" - Turbinia API Server - - Turbinia is an open-source framework for deploying,managing, and running distributed forensic workloads # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by: https://openapi-generator.tech -""" - -import unittest - -import turbinia_api_lib -from turbinia_api_lib.model.complete_turbinia_stats import CompleteTurbiniaStats -from turbinia_api_lib import configuration - - -class TestCompleteTurbiniaStats(unittest.TestCase): - """CompleteTurbiniaStats unit test stubs""" - _configuration = configuration.Configuration() - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_models/test_http_validation_error.py b/turbinia/api/client/test/test_models/test_http_validation_error.py deleted file mode 100644 index 086b4888f..000000000 --- a/turbinia/api/client/test/test_models/test_http_validation_error.py +++ /dev/null @@ -1,25 +0,0 @@ -# coding: utf-8 - -""" - Turbinia API Server - - Turbinia is an open-source framework for deploying,managing, and running distributed forensic workloads # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by: https://openapi-generator.tech -""" - -import unittest - -import turbinia_api_lib -from turbinia_api_lib.model.http_validation_error import HTTPValidationError -from turbinia_api_lib import configuration - - -class TestHTTPValidationError(unittest.TestCase): - """HTTPValidationError unit test stubs""" - _configuration = configuration.Configuration() - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_models/test_request.py b/turbinia/api/client/test/test_models/test_request.py deleted file mode 100644 index 790833f50..000000000 --- a/turbinia/api/client/test/test_models/test_request.py +++ /dev/null @@ -1,25 +0,0 @@ -# coding: utf-8 - -""" - Turbinia API Server - - Turbinia is an open-source framework for deploying,managing, and running distributed forensic workloads # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by: https://openapi-generator.tech -""" - -import unittest - -import turbinia_api_lib -from turbinia_api_lib.model.request import Request -from turbinia_api_lib import configuration - - -class TestRequest(unittest.TestCase): - """Request unit test stubs""" - _configuration = configuration.Configuration() - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_models/test_validation_error.py b/turbinia/api/client/test/test_models/test_validation_error.py deleted file mode 100644 index 415c9b755..000000000 --- a/turbinia/api/client/test/test_models/test_validation_error.py +++ /dev/null @@ -1,25 +0,0 @@ -# coding: utf-8 - -""" - Turbinia API Server - - Turbinia is an open-source framework for deploying,managing, and running distributed forensic workloads # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by: https://openapi-generator.tech -""" - -import unittest - -import turbinia_api_lib -from turbinia_api_lib.model.validation_error import ValidationError -from turbinia_api_lib import configuration - - -class TestValidationError(unittest.TestCase): - """ValidationError unit test stubs""" - _configuration = configuration.Configuration() - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/__init__.py b/turbinia/api/client/test/test_paths/__init__.py deleted file mode 100644 index 1309632d3..000000000 --- a/turbinia/api/client/test/test_paths/__init__.py +++ /dev/null @@ -1,68 +0,0 @@ -import json -import typing - -import urllib3 -from urllib3._collections import HTTPHeaderDict - - -class ApiTestMixin: - json_content_type = 'application/json' - user_agent = 'OpenAPI-Generator/1.0.0/python' - - @classmethod - def assert_pool_manager_request_called_with( - cls, - mock_request, - url: str, - method: str = 'POST', - body: typing.Optional[bytes] = None, - content_type: typing.Optional[str] = None, - accept_content_type: typing.Optional[str] = None, - stream: bool = False, - ): - headers = { - 'User-Agent': cls.user_agent - } - if accept_content_type: - headers['Accept'] = accept_content_type - if content_type: - headers['Content-Type'] = content_type - kwargs = dict( - headers=HTTPHeaderDict(headers), - preload_content=not stream, - timeout=None, - ) - if content_type and method != 'GET': - kwargs['body'] = body - mock_request.assert_called_with( - method, - url, - **kwargs - ) - - @staticmethod - def headers_for_content_type(content_type: str) -> typing.Dict[str, str]: - return {'content-type': content_type} - - @classmethod - def response( - cls, - body: typing.Union[str, bytes], - status: int = 200, - content_type: str = json_content_type, - headers: typing.Optional[typing.Dict[str, str]] = None, - preload_content: bool = True - ) -> urllib3.HTTPResponse: - if headers is None: - headers = {} - headers.update(cls.headers_for_content_type(content_type)) - return urllib3.HTTPResponse( - body, - headers=headers, - status=status, - preload_content=preload_content - ) - - @staticmethod - def json_bytes(in_data: typing.Any) -> bytes: - return json.dumps(in_data, separators=(",", ":"), ensure_ascii=False).encode('utf-8') diff --git a/turbinia/api/client/test/test_paths/test_api_config_/__init__.py b/turbinia/api/client/test/test_paths/test_api_config_/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_config_/test_get.py b/turbinia/api/client/test/test_paths/test_api_config_/test_get.py deleted file mode 100644 index 9d02211de..000000000 --- a/turbinia/api/client/test/test_paths/test_api_config_/test_get.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_config_ import get # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiConfig(ApiTestMixin, unittest.TestCase): - """ - ApiConfig unit test stubs - Read Config # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/test_api_config_request_options/__init__.py b/turbinia/api/client/test/test_paths/test_api_config_request_options/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_config_request_options/test_get.py b/turbinia/api/client/test/test_paths/test_api_config_request_options/test_get.py deleted file mode 100644 index f8b00522c..000000000 --- a/turbinia/api/client/test/test_paths/test_api_config_request_options/test_get.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_config_request_options import get # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiConfigRequestOptions(ApiTestMixin, unittest.TestCase): - """ - ApiConfigRequestOptions unit test stubs - Get Request Options # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/test_api_evidence_evidence_id/__init__.py b/turbinia/api/client/test/test_paths/test_api_evidence_evidence_id/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_evidence_evidence_id/test_get.py b/turbinia/api/client/test/test_paths/test_api_evidence_evidence_id/test_get.py deleted file mode 100644 index 71508ee56..000000000 --- a/turbinia/api/client/test/test_paths/test_api_evidence_evidence_id/test_get.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_evidence_evidence_id import get # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiEvidenceEvidenceId(ApiTestMixin, unittest.TestCase): - """ - ApiEvidenceEvidenceId unit test stubs - Get Evidence By Id # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/test_api_evidence_query/__init__.py b/turbinia/api/client/test/test_paths/test_api_evidence_query/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_evidence_query/test_get.py b/turbinia/api/client/test/test_paths/test_api_evidence_query/test_get.py deleted file mode 100644 index 15e621417..000000000 --- a/turbinia/api/client/test/test_paths/test_api_evidence_query/test_get.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_evidence_query import get # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiEvidenceQuery(ApiTestMixin, unittest.TestCase): - """ - ApiEvidenceQuery unit test stubs - Query Evidence # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/test_api_evidence_summary/__init__.py b/turbinia/api/client/test/test_paths/test_api_evidence_summary/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_evidence_summary/test_get.py b/turbinia/api/client/test/test_paths/test_api_evidence_summary/test_get.py deleted file mode 100644 index 8a431584b..000000000 --- a/turbinia/api/client/test/test_paths/test_api_evidence_summary/test_get.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_evidence_summary import get # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiEvidenceSummary(ApiTestMixin, unittest.TestCase): - """ - ApiEvidenceSummary unit test stubs - Get Evidence Summary # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/test_api_evidence_types/__init__.py b/turbinia/api/client/test/test_paths/test_api_evidence_types/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_evidence_types/test_get.py b/turbinia/api/client/test/test_paths/test_api_evidence_types/test_get.py deleted file mode 100644 index 589936139..000000000 --- a/turbinia/api/client/test/test_paths/test_api_evidence_types/test_get.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_evidence_types import get # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiEvidenceTypes(ApiTestMixin, unittest.TestCase): - """ - ApiEvidenceTypes unit test stubs - Get Evidence Types # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/test_api_evidence_types_evidence_type/__init__.py b/turbinia/api/client/test/test_paths/test_api_evidence_types_evidence_type/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_evidence_types_evidence_type/test_get.py b/turbinia/api/client/test/test_paths/test_api_evidence_types_evidence_type/test_get.py deleted file mode 100644 index c7ae46f8b..000000000 --- a/turbinia/api/client/test/test_paths/test_api_evidence_types_evidence_type/test_get.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_evidence_types_evidence_type import get # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiEvidenceTypesEvidenceType(ApiTestMixin, unittest.TestCase): - """ - ApiEvidenceTypesEvidenceType unit test stubs - Get Evidence Attributes # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/test_api_evidence_upload/__init__.py b/turbinia/api/client/test/test_paths/test_api_evidence_upload/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_evidence_upload/test_post.py b/turbinia/api/client/test/test_paths/test_api_evidence_upload/test_post.py deleted file mode 100644 index 6e519a392..000000000 --- a/turbinia/api/client/test/test_paths/test_api_evidence_upload/test_post.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_evidence_upload import post # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiEvidenceUpload(ApiTestMixin, unittest.TestCase): - """ - ApiEvidenceUpload unit test stubs - Upload Evidence # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = post.ApiForpost(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/test_api_jobs_/__init__.py b/turbinia/api/client/test/test_paths/test_api_jobs_/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_jobs_/test_get.py b/turbinia/api/client/test/test_paths/test_api_jobs_/test_get.py deleted file mode 100644 index 1e9bb98b3..000000000 --- a/turbinia/api/client/test/test_paths/test_api_jobs_/test_get.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_jobs_ import get # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiJobs(ApiTestMixin, unittest.TestCase): - """ - ApiJobs unit test stubs - Read Jobs # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/test_api_logs_query/__init__.py b/turbinia/api/client/test/test_paths/test_api_logs_query/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_logs_query/test_get.py b/turbinia/api/client/test/test_paths/test_api_logs_query/test_get.py deleted file mode 100644 index 2e59c8e3c..000000000 --- a/turbinia/api/client/test/test_paths/test_api_logs_query/test_get.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_logs_query import get # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiLogsQuery(ApiTestMixin, unittest.TestCase): - """ - ApiLogsQuery unit test stubs - Get Logs # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/test_api_request_/__init__.py b/turbinia/api/client/test/test_paths/test_api_request_/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_request_/test_post.py b/turbinia/api/client/test/test_paths/test_api_request_/test_post.py deleted file mode 100644 index 94a26f5bb..000000000 --- a/turbinia/api/client/test/test_paths/test_api_request_/test_post.py +++ /dev/null @@ -1,43 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_request_ import post # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiRequest(ApiTestMixin, unittest.TestCase): - """ - ApiRequest unit test stubs - Create Request # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = post.ApiForpost(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/test_api_request_request_id/__init__.py b/turbinia/api/client/test/test_paths/test_api_request_request_id/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_request_request_id/test_get.py b/turbinia/api/client/test/test_paths/test_api_request_request_id/test_get.py deleted file mode 100644 index 987fc9e43..000000000 --- a/turbinia/api/client/test/test_paths/test_api_request_request_id/test_get.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_request_request_id import get # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiRequestRequestId(ApiTestMixin, unittest.TestCase): - """ - ApiRequestRequestId unit test stubs - Get Request Status # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/test_api_request_summary/__init__.py b/turbinia/api/client/test/test_paths/test_api_request_summary/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_request_summary/test_get.py b/turbinia/api/client/test/test_paths/test_api_request_summary/test_get.py deleted file mode 100644 index b7f258d6f..000000000 --- a/turbinia/api/client/test/test_paths/test_api_request_summary/test_get.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_request_summary import get # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiRequestSummary(ApiTestMixin, unittest.TestCase): - """ - ApiRequestSummary unit test stubs - Get Requests Summary # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/test_api_result_request_request_id/__init__.py b/turbinia/api/client/test/test_paths/test_api_result_request_request_id/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_result_request_request_id/test_get.py b/turbinia/api/client/test/test_paths/test_api_result_request_request_id/test_get.py deleted file mode 100644 index 22dbb9d9a..000000000 --- a/turbinia/api/client/test/test_paths/test_api_result_request_request_id/test_get.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_result_request_request_id import get # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiResultRequestRequestId(ApiTestMixin, unittest.TestCase): - """ - ApiResultRequestRequestId unit test stubs - Get Request Output # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/test_api_result_task_task_id/__init__.py b/turbinia/api/client/test/test_paths/test_api_result_task_task_id/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_result_task_task_id/test_get.py b/turbinia/api/client/test/test_paths/test_api_result_task_task_id/test_get.py deleted file mode 100644 index 520665bab..000000000 --- a/turbinia/api/client/test/test_paths/test_api_result_task_task_id/test_get.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_result_task_task_id import get # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiResultTaskTaskId(ApiTestMixin, unittest.TestCase): - """ - ApiResultTaskTaskId unit test stubs - Get Task Output # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/test_api_task_statistics/__init__.py b/turbinia/api/client/test/test_paths/test_api_task_statistics/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_task_statistics/test_get.py b/turbinia/api/client/test/test_paths/test_api_task_statistics/test_get.py deleted file mode 100644 index ac13b17b4..000000000 --- a/turbinia/api/client/test/test_paths/test_api_task_statistics/test_get.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_task_statistics import get # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiTaskStatistics(ApiTestMixin, unittest.TestCase): - """ - ApiTaskStatistics unit test stubs - Get Task Statistics # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/test_api_task_task_id/__init__.py b/turbinia/api/client/test/test_paths/test_api_task_task_id/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_task_task_id/test_get.py b/turbinia/api/client/test/test_paths/test_api_task_task_id/test_get.py deleted file mode 100644 index 40d679dab..000000000 --- a/turbinia/api/client/test/test_paths/test_api_task_task_id/test_get.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_task_task_id import get # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiTaskTaskId(ApiTestMixin, unittest.TestCase): - """ - ApiTaskTaskId unit test stubs - Get Task Status # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_paths/test_api_task_workers/__init__.py b/turbinia/api/client/test/test_paths/test_api_task_workers/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/turbinia/api/client/test/test_paths/test_api_task_workers/test_get.py b/turbinia/api/client/test/test_paths/test_api_task_workers/test_get.py deleted file mode 100644 index 84803385f..000000000 --- a/turbinia/api/client/test/test_paths/test_api_task_workers/test_get.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding: utf-8 - -""" - - - Generated by: https://openapi-generator.tech -""" - -import unittest -from unittest.mock import patch - -import urllib3 - -import turbinia_api_lib -from turbinia_api_lib.paths.api_task_workers import get # noqa: E501 -from turbinia_api_lib import configuration, schemas, api_client - -from .. import ApiTestMixin - - -class TestApiTaskWorkers(ApiTestMixin, unittest.TestCase): - """ - ApiTaskWorkers unit test stubs - Get Workers Status # noqa: E501 - """ - _configuration = configuration.Configuration() - - def setUp(self): - used_api_client = api_client.ApiClient(configuration=self._configuration) - self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 - - def tearDown(self): - pass - - response_status = 200 - - - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_request.py b/turbinia/api/client/test/test_request.py deleted file mode 100644 index 2b21e9c41..000000000 --- a/turbinia/api/client/test/test_request.py +++ /dev/null @@ -1,37 +0,0 @@ -""" - Turbinia API Server - - Turbinia API server # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by: https://openapi-generator.tech -""" - - -import sys -import unittest - -import turbinia_api_lib -from turbinia_api_lib.model.base_request_options import BaseRequestOptions -globals()['BaseRequestOptions'] = BaseRequestOptions -from turbinia_api_lib.model.request import Request - - -class TestRequest(unittest.TestCase): - """Request unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testRequest(self): - """Test Request""" - # FIXME: construct object with mandatory attributes with example values - # model = Request() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_turbinia_configuration_api.py b/turbinia/api/client/test/test_turbinia_configuration_api.py deleted file mode 100644 index 6b42792d4..000000000 --- a/turbinia/api/client/test/test_turbinia_configuration_api.py +++ /dev/null @@ -1,56 +0,0 @@ -""" - Turbinia API Server - - Turbinia API server # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by: https://openapi-generator.tech -""" - - -import unittest - -import turbinia_api_lib -from turbinia_api_lib.api.turbinia_configuration_api import TurbiniaConfigurationApi # noqa: E501 - - -class TestTurbiniaConfigurationApi(unittest.TestCase): - """TurbiniaConfigurationApi unit test stubs""" - - def setUp(self): - self.api = TurbiniaConfigurationApi() # noqa: E501 - - def tearDown(self): - pass - - def test_get_evidence_attributes_by_name(self): - """Test case for get_evidence_attributes_by_name - - Get Evidence Attributes By Name # noqa: E501 - """ - pass - - def test_get_evidence_types(self): - """Test case for get_evidence_types - - Get Evidence Types # noqa: E501 - """ - pass - - def test_get_request_options(self): - """Test case for get_request_options - - Get Request Options # noqa: E501 - """ - pass - - def test_read_config(self): - """Test case for read_config - - Read Config # noqa: E501 - """ - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_turbinia_evidence_api.py b/turbinia/api/client/test/test_turbinia_evidence_api.py deleted file mode 100644 index e3f461ab7..000000000 --- a/turbinia/api/client/test/test_turbinia_evidence_api.py +++ /dev/null @@ -1,75 +0,0 @@ -# coding: utf-8 - -""" - Turbinia API Server - - Turbinia API server # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" - - -import unittest - -import turbinia_api_lib -from turbinia_api_lib.api.turbinia_evidence_api import TurbiniaEvidenceApi # noqa: E501 -from turbinia_api_lib.rest import ApiException - - -class TestTurbiniaEvidenceApi(unittest.TestCase): - """TurbiniaEvidenceApi unit test stubs""" - - def setUp(self): - self.api = turbinia_api_lib.api.turbinia_evidence_api.TurbiniaEvidenceApi() # noqa: E501 - - def tearDown(self): - pass - - def test_get_evidence_attributes(self): - """Test case for get_evidence_attributes - - Get Evidence Attributes # noqa: E501 - """ - pass - - def test_get_evidence_by_id(self): - """Test case for get_evidence_by_id - - Get Evidence By Id # noqa: E501 - """ - pass - - def test_get_evidence_summary(self): - """Test case for get_evidence_summary - - Get Evidence Summary # noqa: E501 - """ - pass - - def test_get_evidence_types(self): - """Test case for get_evidence_types - - Get Evidence Types # noqa: E501 - """ - pass - - def test_query_evidence(self): - """Test case for query_evidence - - Query Evidence # noqa: E501 - """ - pass - - def test_upload_evidence(self): - """Test case for upload_evidence - - Upload Evidence # noqa: E501 - """ - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_turbinia_jobs_api.py b/turbinia/api/client/test/test_turbinia_jobs_api.py deleted file mode 100644 index 3505e890b..000000000 --- a/turbinia/api/client/test/test_turbinia_jobs_api.py +++ /dev/null @@ -1,35 +0,0 @@ -""" - Turbinia API Server - - Turbinia API server # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by: https://openapi-generator.tech -""" - - -import unittest - -import turbinia_api_lib -from turbinia_api_lib.api.turbinia_jobs_api import TurbiniaJobsApi # noqa: E501 - - -class TestTurbiniaJobsApi(unittest.TestCase): - """TurbiniaJobsApi unit test stubs""" - - def setUp(self): - self.api = TurbiniaJobsApi() # noqa: E501 - - def tearDown(self): - pass - - def test_read_jobs(self): - """Test case for read_jobs - - Read Jobs # noqa: E501 - """ - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_turbinia_logs_api.py b/turbinia/api/client/test/test_turbinia_logs_api.py deleted file mode 100644 index 8ff43c5f3..000000000 --- a/turbinia/api/client/test/test_turbinia_logs_api.py +++ /dev/null @@ -1,35 +0,0 @@ -""" - Turbinia API Server - - Turbinia API server # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by: https://openapi-generator.tech -""" - - -import unittest - -import turbinia_api_lib -from turbinia_api_lib.api.turbinia_logs_api import TurbiniaLogsApi # noqa: E501 - - -class TestTurbiniaLogsApi(unittest.TestCase): - """TurbiniaLogsApi unit test stubs""" - - def setUp(self): - self.api = TurbiniaLogsApi() # noqa: E501 - - def tearDown(self): - pass - - def test_get_logs(self): - """Test case for get_logs - - Get Logs # noqa: E501 - """ - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_turbinia_request_results_api.py b/turbinia/api/client/test/test_turbinia_request_results_api.py deleted file mode 100644 index 01119b8dc..000000000 --- a/turbinia/api/client/test/test_turbinia_request_results_api.py +++ /dev/null @@ -1,42 +0,0 @@ -""" - Turbinia API Server - - Turbinia API server # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by: https://openapi-generator.tech -""" - - -import unittest - -import turbinia_api_lib -from turbinia_api_lib.api.turbinia_request_results_api import TurbiniaRequestResultsApi # noqa: E501 - - -class TestTurbiniaRequestResultsApi(unittest.TestCase): - """TurbiniaRequestResultsApi unit test stubs""" - - def setUp(self): - self.api = TurbiniaRequestResultsApi() # noqa: E501 - - def tearDown(self): - pass - - def test_get_request_output(self): - """Test case for get_request_output - - Get Request Output # noqa: E501 - """ - pass - - def test_get_task_output(self): - """Test case for get_task_output - - Get Task Output # noqa: E501 - """ - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_turbinia_requests_api.py b/turbinia/api/client/test/test_turbinia_requests_api.py deleted file mode 100644 index 5117175be..000000000 --- a/turbinia/api/client/test/test_turbinia_requests_api.py +++ /dev/null @@ -1,49 +0,0 @@ -""" - Turbinia API Server - - Turbinia API server # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by: https://openapi-generator.tech -""" - - -import unittest - -import turbinia_api_lib -from turbinia_api_lib.api.turbinia_requests_api import TurbiniaRequestsApi # noqa: E501 - - -class TestTurbiniaRequestsApi(unittest.TestCase): - """TurbiniaRequestsApi unit test stubs""" - - def setUp(self): - self.api = TurbiniaRequestsApi() # noqa: E501 - - def tearDown(self): - pass - - def test_create_request(self): - """Test case for create_request - - Create Request # noqa: E501 - """ - pass - - def test_get_request_status(self): - """Test case for get_request_status - - Get Request Status # noqa: E501 - """ - pass - - def test_get_requests_summary(self): - """Test case for get_requests_summary - - Get Requests Summary # noqa: E501 - """ - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_turbinia_tasks_api.py b/turbinia/api/client/test/test_turbinia_tasks_api.py deleted file mode 100644 index f73d5f780..000000000 --- a/turbinia/api/client/test/test_turbinia_tasks_api.py +++ /dev/null @@ -1,35 +0,0 @@ -""" - Turbinia API Server - - Turbinia API server # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by: https://openapi-generator.tech -""" - - -import unittest - -import turbinia_api_lib -from turbinia_api_lib.api.turbinia_tasks_api import TurbiniaTasksApi # noqa: E501 - - -class TestTurbiniaTasksApi(unittest.TestCase): - """TurbiniaTasksApi unit test stubs""" - - def setUp(self): - self.api = TurbiniaTasksApi() # noqa: E501 - - def tearDown(self): - pass - - def test_get_task_status(self): - """Test case for get_task_status - - Get Task Status # noqa: E501 - """ - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_validation_error.py b/turbinia/api/client/test/test_validation_error.py deleted file mode 100644 index 2686471db..000000000 --- a/turbinia/api/client/test/test_validation_error.py +++ /dev/null @@ -1,37 +0,0 @@ -""" - Turbinia API Server - - Turbinia API server # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by: https://openapi-generator.tech -""" - - -import sys -import unittest - -import turbinia_api_lib -from turbinia_api_lib.model.validation_error_loc_inner import ValidationErrorLocInner -globals()['ValidationErrorLocInner'] = ValidationErrorLocInner -from turbinia_api_lib.model.validation_error import ValidationError - - -class TestValidationError(unittest.TestCase): - """ValidationError unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testValidationError(self): - """Test ValidationError""" - # FIXME: construct object with mandatory attributes with example values - # model = ValidationError() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/turbinia/api/client/test/test_validation_error_loc_inner.py b/turbinia/api/client/test/test_validation_error_loc_inner.py deleted file mode 100644 index c9f5e6490..000000000 --- a/turbinia/api/client/test/test_validation_error_loc_inner.py +++ /dev/null @@ -1,35 +0,0 @@ -""" - Turbinia API Server - - Turbinia API server # noqa: E501 - - The version of the OpenAPI document: 1.0.0 - Generated by: https://openapi-generator.tech -""" - - -import sys -import unittest - -import turbinia_api_lib -from turbinia_api_lib.model.validation_error_loc_inner import ValidationErrorLocInner - - -class TestValidationErrorLocInner(unittest.TestCase): - """ValidationErrorLocInner unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testValidationErrorLocInner(self): - """Test ValidationErrorLocInner""" - # FIXME: construct object with mandatory attributes with example values - # model = ValidationErrorLocInner() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() From b640b15ba1a6ad7d6ef3b5644eb4ee4e97e608b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Oct 2023 07:21:33 -0700 Subject: [PATCH 04/10] Bump @babel/traverse from 7.20.12 to 7.23.2 in /web (#1382) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.20.12 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package-lock.json | 252 +++++++++++++++++++++--------------------- 1 file changed, 128 insertions(+), 124 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index d37bd7024..d96caddd7 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -59,12 +59,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" @@ -128,13 +129,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", - "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "dependencies": { - "@babel/types": "^7.20.7", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { @@ -269,9 +271,9 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" @@ -290,25 +292,25 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -437,30 +439,30 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" @@ -505,13 +507,13 @@ } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -519,9 +521,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", - "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1695,33 +1697,33 @@ } }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz", - "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1730,13 +1732,13 @@ } }, "node_modules/@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -11617,12 +11619,13 @@ } }, "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "requires": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" } }, "@babel/compat-data": { @@ -11666,13 +11669,14 @@ } }, "@babel/generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", - "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "requires": { - "@babel/types": "^7.20.7", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "dependencies": { @@ -11778,9 +11782,9 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true }, "@babel/helper-explode-assignable-expression": { @@ -11793,22 +11797,22 @@ } }, "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-member-expression-to-functions": { @@ -11904,24 +11908,24 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true }, "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true }, "@babel/helper-validator-option": { @@ -11954,20 +11958,20 @@ } }, "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", - "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==" + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", @@ -12748,42 +12752,42 @@ } }, "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz", - "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, From 5e3f2914d4cfc307d6c9e015679b727a4f9b4d1a Mon Sep 17 00:00:00 2001 From: hacktobeer Date: Thu, 19 Oct 2023 09:20:03 +0200 Subject: [PATCH 05/10] Delete outdated k8s configuration and documentation (#1356) * delete k8s files as moved to OSDFIR infra * rewrite/remove doc old gke references * fix references * last refs fixes * install ref * Update docs/user/install.md Co-authored-by: Wajih Yassine <54372074+wajihyassine@users.noreply.github.com> --------- Co-authored-by: Wajih Yassine <54372074+wajihyassine@users.noreply.github.com> --- docs/developer/develop-vscode.md | 60 +-- docs/user/api-server.md | 10 +- docs/user/gke-sre.md | 383 ------------------ docs/user/index.rst | 6 - docs/user/install-gcp-pubsub.md | 157 ------- docs/user/install-gke-celery.md | 107 ----- docs/user/install-gke-external.md | 252 ------------ docs/user/install-gke-monitoring.md | 119 ------ docs/user/install-gke-pubsub.md | 47 --- docs/user/install.md | 2 +- k8s/celery/destroy-celery.sh | 21 - k8s/celery/redis-server.yaml | 53 --- k8s/celery/redis-service.yaml | 12 - k8s/celery/setup-celery.sh | 31 -- k8s/celery/turbinia-api-server.yaml | 72 ---- k8s/celery/turbinia-api-service.yaml | 16 - k8s/celery/turbinia-iap.yaml | 9 - k8s/celery/turbinia-ingress.yaml | 57 --- k8s/celery/turbinia-oauth2-proxy.yaml | 78 ---- k8s/common/turbinia-autoscale-cpu.yaml | 12 - k8s/common/turbinia-controller.yaml | 69 ---- .../turbinia-server-metrics-service.yaml | 12 - k8s/common/turbinia-server.yaml | 59 --- .../turbinia-volume-claim-filestore.yaml | 12 - k8s/common/turbinia-volume-filestore.yaml | 12 - .../turbinia-worker-metrics-service.yaml | 12 - k8s/common/turbinia-worker.yaml | 83 ---- .../dfdewey-volume-claim-filestore.yaml | 12 - k8s/dfdewey/dfdewey-volume-filestore.yaml | 12 - k8s/dfdewey/opensearch-configmap.yaml | 11 - k8s/dfdewey/opensearch-server.yaml | 48 --- k8s/dfdewey/opensearch-service.yaml | 12 - k8s/dfdewey/postgres-configmap.yaml | 10 - k8s/dfdewey/postgres-server.yaml | 33 -- k8s/dfdewey/postgres-service.yaml | 12 - k8s/dfdewey/setup-dfdewey.sh | 40 -- k8s/gcp-pubsub/destroy-pubsub.sh | 17 - k8s/gcp-pubsub/setup-pubsub.sh | 26 -- k8s/tools/.clusterconfig | 52 --- k8s/tools/deploy-celery-gke.sh | 257 ------------ k8s/tools/deploy-pubsub-gke.sh | 336 --------------- k8s/tools/destroy-celery-gke.sh | 110 ----- k8s/tools/destroy-pubsub-gke.sh | 161 -------- k8s/tools/update-gke-infra.sh | 305 -------------- .../provisioning/dashboards/turbinia.yaml | 13 - .../provisioning/datasources/prometheus.yaml | 6 - monitoring/k8s/gen-yaml.sh | 22 - .../grafana/turbinia-application-metrics.yaml | 17 - .../grafana/turbinia-healthcheck-metrics.yaml | 17 - .../k8s/prometheus/prometheus-additional.yaml | 7 - .../k8s/prometheus/turbinia-custom-rules.yaml | 13 - monitoring/prometheus/prometheus.yaml | 26 -- 52 files changed, 11 insertions(+), 3327 deletions(-) delete mode 100644 docs/user/gke-sre.md delete mode 100644 docs/user/install-gcp-pubsub.md delete mode 100644 docs/user/install-gke-celery.md delete mode 100644 docs/user/install-gke-external.md delete mode 100644 docs/user/install-gke-monitoring.md delete mode 100644 docs/user/install-gke-pubsub.md delete mode 100755 k8s/celery/destroy-celery.sh delete mode 100644 k8s/celery/redis-server.yaml delete mode 100644 k8s/celery/redis-service.yaml delete mode 100755 k8s/celery/setup-celery.sh delete mode 100644 k8s/celery/turbinia-api-server.yaml delete mode 100644 k8s/celery/turbinia-api-service.yaml delete mode 100644 k8s/celery/turbinia-iap.yaml delete mode 100644 k8s/celery/turbinia-ingress.yaml delete mode 100644 k8s/celery/turbinia-oauth2-proxy.yaml delete mode 100644 k8s/common/turbinia-autoscale-cpu.yaml delete mode 100644 k8s/common/turbinia-controller.yaml delete mode 100644 k8s/common/turbinia-server-metrics-service.yaml delete mode 100644 k8s/common/turbinia-server.yaml delete mode 100644 k8s/common/turbinia-volume-claim-filestore.yaml delete mode 100644 k8s/common/turbinia-volume-filestore.yaml delete mode 100644 k8s/common/turbinia-worker-metrics-service.yaml delete mode 100644 k8s/common/turbinia-worker.yaml delete mode 100644 k8s/dfdewey/dfdewey-volume-claim-filestore.yaml delete mode 100644 k8s/dfdewey/dfdewey-volume-filestore.yaml delete mode 100644 k8s/dfdewey/opensearch-configmap.yaml delete mode 100644 k8s/dfdewey/opensearch-server.yaml delete mode 100644 k8s/dfdewey/opensearch-service.yaml delete mode 100644 k8s/dfdewey/postgres-configmap.yaml delete mode 100644 k8s/dfdewey/postgres-server.yaml delete mode 100644 k8s/dfdewey/postgres-service.yaml delete mode 100755 k8s/dfdewey/setup-dfdewey.sh delete mode 100755 k8s/gcp-pubsub/destroy-pubsub.sh delete mode 100755 k8s/gcp-pubsub/setup-pubsub.sh delete mode 100644 k8s/tools/.clusterconfig delete mode 100755 k8s/tools/deploy-celery-gke.sh delete mode 100755 k8s/tools/deploy-pubsub-gke.sh delete mode 100755 k8s/tools/destroy-celery-gke.sh delete mode 100755 k8s/tools/destroy-pubsub-gke.sh delete mode 100755 k8s/tools/update-gke-infra.sh delete mode 100644 monitoring/grafana/provisioning/dashboards/turbinia.yaml delete mode 100644 monitoring/grafana/provisioning/datasources/prometheus.yaml delete mode 100755 monitoring/k8s/gen-yaml.sh delete mode 100644 monitoring/k8s/grafana/turbinia-application-metrics.yaml delete mode 100644 monitoring/k8s/grafana/turbinia-healthcheck-metrics.yaml delete mode 100644 monitoring/k8s/prometheus/prometheus-additional.yaml delete mode 100644 monitoring/k8s/prometheus/turbinia-custom-rules.yaml delete mode 100644 monitoring/prometheus/prometheus.yaml diff --git a/docs/developer/develop-vscode.md b/docs/developer/develop-vscode.md index c74b5887d..a8c58ac3b 100644 --- a/docs/developer/develop-vscode.md +++ b/docs/developer/develop-vscode.md @@ -4,7 +4,7 @@ This procedure will get you up and running with a Visual Studio Code environment for Turbinia development. The provided configuration files will create a development container containing all dependencies, pylint and yapf correctly setup and launch configurations for both client, server and workers. With this setup it is possible to initiate full Turbinia debug sessions including breakpoints, watches and stepping. -You can set Visual Studio Code up to run a local stack (using redis and celery) or use a hybrid GCP stack (using pubsub, datastore and cloud functions). We advice you to run a local stack if you don't need to debug or develop Turbinia GCP functionality. +You can set Visual Studio Code up to run a local stack (using redis and celery). ## Before you start @@ -39,8 +39,6 @@ _Note_: If vscode does not ask you to reopen in a container you need to verify y _Note_: The instructions contain shell commands to execute, please execute those commands in the vscode terminal (which runs in the development container) and not in a terminal on your host! -Continue with Step 4 for a local Turbinia setup or Step 5 for a GCP hybrid setup. - #### Step 4 - Local Turbinia setup The local turbinia setup will use redis and celery. Let's create the configuration file for this setup. @@ -51,53 +49,11 @@ _Note_: This command needs to be executed in the vscode terminal! $ sed -f ./docker/vscode/redis-config.sed ./turbinia/config/turbinia_config_tmpl.py > ~/.turbiniarc ``` -Let's verify the installation in Step 6. - -#### Step 5 - GCP hybrid Turbinia setup - -Follow the ‘GCP Setup’ section [here](../user/install-gcp-pubsub.md) and setup Cloud Functions, a GCE bucket, Datastore and PubSub. - -- Create a pubsub topic, eg ‘turbinia-dev’ -- Create a GCE storage bucket with a unique name - -Create the Turbinia hybrid configuration file. - -_Note_: This command needs to be executed in the vscode terminal! - -``` -$ sed -f ./docker/vscode/psq-config.sed ./turbinia/config/turbinia_config_tmpl.py > ~/.turbiniarc -``` - -Edit the configuration file `~/.turbiniarc` and set below variables according to the GCP project you are using. Make sure all values are between quotes! - -``` -TURBINIA_PROJECT = '[your_gcp_project_name]' -TURBINIA_REGION = '[your_preferred_region]' eg 'us-central1' -TURBINIA_ZONE = '[your_preferred_zone]' eg 'us-central1-f' -PUBSUB_TOPIC = '[your_gcp_pubsub_topic_name]' eg 'turbinia-dev' -BUCKET_NAME = '[your_gcp_bucket_name]' -``` - -Setup authentication for the GCP project. +Let's verify the installation in Step 5. -_Note_: These commands need to be executed in the vscode terminal! - -``` -$ gcloud auth login -$ gcloud auth application-default login -``` +#### Step 5 - Turbinia installation verification -Deploy the Google Cloud Functions - -_Note_: This command needs to be executed in the vscode terminal! - -``` -$ PYTHONPATH=. python3 tools/gcf_init/deploy_gcf.py -``` - -#### Step 6 - Turbinia installation verification - -Let's verify that the GCP hybrid setup is working before we start developing and debugging. We are going to start a server and worker in separate vscode terminals and create a Turbinia request in a third. Open up 3 vscode terminals and execute below commands. +Let's verify that the local setup is working before we start developing and debugging. We are going to start a server and worker in separate vscode terminals and create a Turbinia request in a third. Open up 3 vscode terminals and execute below commands. _Note_: These commands need to be executed in the vscode terminal! @@ -114,12 +70,6 @@ For a local setup $ python3 turbinia/turbiniactl.py celeryworker ``` -For a GCP hybrid setup - -``` -$ python3 turbinia/turbiniactl.py psqworker -``` - Terminal 3 - Fetch and process some evidence ``` @@ -129,7 +79,7 @@ $ python3 turbinia/turbiniactl.py compresseddirectory -l /evidence/history.tgz $ python3 turbinia/turbiniactl.py -a status -r [request_id] ``` -This should process the evidence and show output in each terminal for server and worker. Results will be stored in `/evidence` and in the GCS bucket. +This should process the evidence and show output in each terminal for server and worker. Results will be stored in `/evidence`. #### Step 8 - Debugging example diff --git a/docs/user/api-server.md b/docs/user/api-server.md index 789e1d50f..eae37a5c8 100644 --- a/docs/user/api-server.md +++ b/docs/user/api-server.md @@ -4,17 +4,17 @@ Turbinia's API server provides a RESTful interface to Turbinia's functionality. It allows users to create and manage logical jobs, which are used to schedule forensic processing tasks. The API server also provides a way for users to monitor the status of their jobs and view the results of their processing tasks. ## Getting started -The following sections describe how to get the Turbinia API server up and running. Please note that The API server is only compatible with Turbinia deployments that use Redis as a datastore and Celery workers. If your deployment uses GCP PubSub and/or GCP PSQ workers you will not be able to use the API server. GCP PubSub/PSQ dependencies will be deprecated in the near future so it is recommended to redeploy Turbinia and use Redis and Celery. +The following sections describe how to get the Turbinia API server up and running. Please note that The API server is only compatible with Turbinia deployments that use Redis as a datastore and Celery workers. If your deployment uses the old GCP PubSub and/or GCP PSQ workers you will not be able to use the API server. It is recommended to redeploy Turbinia and use Redis and Celery. ### Installation -To use the Turbinia API server you will need to deploy Turbinia in your environment with a configuration that uses Redis and Celery instead of GCP PubSub and PSQ. +To use the Turbinia API server you will need to deploy Turbinia in your environment with a configuration that uses Redis and Celery. -Please follow the instructions for deploying a [Turbinia GKE Celery cluster](install-gke-celery.md) or [local stack using Celery](turbinia-local-stack.md) +Please follow the instructions for deploying a [Turbinia GKE Celery cluster](https://github.com/google/osdfir-infrastructure/tree/main/charts/turbinia) or [local stack using Celery](turbinia-local-stack.md) Note that the Turbinia API server requires access to the Turbinia output directory (```OUTPUT_DIR```) ### Configuration and UI -If you plan on making the Turbinia API Server and Web UI externally accessible (e.g. internet access), follow the instructions for [external access and authentication](install-gke-external.md) +If you plan on making the Turbinia API Server and Web UI externally accessible (e.g. internet access), follow the instructions for [external access and authentication](https://github.com/google/osdfir-infrastructure/tree/main/charts/turbinia) ### Usage You may access the API server at ```http://:```, or via https if you deployed Turbinia for external access using a domain and HTTPS certificate. @@ -24,6 +24,6 @@ Because the Turbinia API Server is built using the FastAPI framework, it provide We also provide a [command-line tool](https://github.com/google/turbinia/tree/master/turbinia/api/cli) and a [Python library](https://github.com/google/turbinia/tree/master/turbinia/api/client) to interact with the API server. ### Authentication -Turbinia API Server uses OAuth2-proxy to provide OpenID Connect and OAuth2 authentication support. If you deployed Turbinia using GCP and GKE cluster instructions, follow the guide for [external access and authentication](install-gke-external.md) to complete the authentication configuration. +Turbinia API Server uses OAuth2-proxy to provide OpenID Connect and OAuth2 authentication support. If you deployed Turbinia using GCP and GKE cluster instructions, follow the guide for [external access and authentication](https://github.com/google/osdfir-infrastructure/tree/main/charts/turbinia) to complete the authentication configuration. For Turbinia deployments using the [local stack](turbinia-local-stack.md), or a non-Google identity provider, make sure to edit the ```oauth2_proxy.cfg``` configuration file in ```docker/oauth2_proxy``` with the appropriate identity provider information such as ```client_id``` and ```client_secret``` prior to deploying the Docker containers in the local stack. If your deployment will use an identity provider other than Google, you will also need to change the ```provider``` and related settings. For more information and how to configure OAuth2-proxy for different providers, refer to the [OAuth2-Proxy Documentation](https://oauth2-proxy.github.io/oauth2-proxy/docs/configuration/oauth_provider). \ No newline at end of file diff --git a/docs/user/gke-sre.md b/docs/user/gke-sre.md deleted file mode 100644 index 501924690..000000000 --- a/docs/user/gke-sre.md +++ /dev/null @@ -1,383 +0,0 @@ -# **GKE SRE Guide to Turbinia** - -## Introduction - -This document covers the Turbinia SRE guide for Google Cloud Kubernetes. It will -cover topics to manage the Turbinia infrastructure in the Kubernetes environment -and includes the Prometheus/Grafana monitoring stack. - -## Debugging Task Failures - -At times, Turbinia may report back some failures after processing some Evidence. -Given that Turbinia Jobs and Tasks can be created to run third party tools, -Turbinia can not anticipate all failures that may occur, especially with a third -party tool. Here are some debugging steps you can take to further investigate -these failures. - -- Refer to the [debugging documentation](debugging.md) - for steps on grabbing the status of a Request or Task that has failed. -- If the debugging documentation doesn’t provide enough information to the Task - failure, you may also grab and review stderr logs for the Task that has failed. - - stderr logs can be found in the path specified in the Turbinia `OUTPUT_DIR`. - The directory containing all Task output can be identified in the directory format - `--`. - - Turbinia logs can be found in the path specified at `LOG_DIR`. -- Determine whether the failure has occurred before by checking the Error - Reporting console, if `STACKDRIVER_TRACEBACK` was enabled in the Turbinia config. - All Turbinia exceptions will be logged to the console and can be helpful to - check to see if the Error has been seen before and whether or not it has been - acknowledged/tracked in an issue. -- Determine whether the Task failure is being tracked in a Github issue. If the - failure occurred from a third party tool, then we’ll likely NOT have tracked - this since the issue would have to be raised with the third party tool rather - than Turbinia. -- If the issue seems to be related to the third party tool, file a bug to the - associated repo else file one for the Turbinia team. - -### Turbinia Controller - -In addition to the troubleshooting steps above, you may also consider deploying -the Turbinia controller to the GKE cluster for further troubleshooting. The -controller pod has the Turbinia client installed and is configured to use your -Turbinia GKE instance. You may create Turbinia requests from this pod to process -GCP disks within your project as well as have access to all Turbinia logs and output -stored in the Filestore path. To deploy the Turbinia controller, please take the following steps. - -If using Turbinia Pubsub - -``` -./k8s/tools/deploy-pubsub-gke.sh --deploy-controller -``` - -If using Turbinia Celery/Redis - -``` -./k8s/tools/deploy-celery-gke.sh --deploy-controller -``` - -Please note that the commands above will also deploy the rest of the infrastructure so -if you'd like to deploy the pod to an existing infrastructure, you can run -`kubectl create -f k8s/common/turbinia-controller.yaml`. Please ensure that you -have the correct `turbiniavolume` filestore path prior to deploying. - -## GKE Infrastructure - -### Preparation - -The GKE stack is managed with the [update-gke-infra.sh](https://github.com/google/turbinia/raw/master/k8s/tools/update-gke-infra.sh) management script. This script can be run from any workstation or cloud shell. -Please follow the steps below on a workstation or cloud shell prior to running -the script. - -- Clone the Turbinia repo or the update-gke-infra.sh script directly. -- Install [Google Cloud SDK](https://cloud.google.com/sdk/docs/install), which - installs the gcloud and kubectl cli tool. -- Authenticate with the Turbinia cloud project: - - `gcloud auth application-default login` -- Connect to the cluster - - `gcloud container clusters get-credentials [cluster] --zone [zone] --project [project]` - -## Updating the Turbinia infrastructure - -The following section will cover how to make updates to the Turbinia -configuration file, environment variables, and updating the Turbinia Docker -image. - -### Update the Turbinia configuration - -The Turbinia configuration is base64 encoded as a ConfigMap value named -`TURBINIA_CONF`. This is then read by the Turbinia Server and Workers as an -environment variable. Any changes made to the configuration do NOT require a -Server/Worker restart if using the `update-gke-infra.sh` as the script will -automatically restart the pods through a `kubectl rollout` - -Please ensure you have the latest version of the configuration file before -making any changes. The new configuration can be loaded into the Turbinia stack -through the following command - -- `$ ./update-gke-infra.sh -c update-config -f [path-to-cleartext-config]` -- Note: the script will automatically encode the config file passed in as base64 - -### Update an environment variable - -The Turbinia stack sets some configuration parameters through Deployment files, -one for the Turbinia Server and one for Workers. In order to update an -environment variable, run the following command. - -- `$ ./update-gke-infra.sh -c update-config -k [env-variable-name] -v [env-variable-value]` - -### Updating the Turbinia Docker image - -Turbinia is currently built as a Docker image which runs in a containerd -environment. - -#### Updating to latest - -When a new version of Turbinia is released, a production Docker image will be -built for both the Server and Worker and tagged with the `latest` tag or a tag -specifying the [release date](https://github.com/google/turbinia/releases). -It is recommended to specify the latest release date tag (e.g. `20220701`) instead -of the `latest` tag to prevent Worker pods from picking up a newer version than the rest of the -environment as they get removed and re-created through auto scaling. Additionaly, -an older release date can be specified if you'd like to rollback to a different -version of Turbinia. These updates can be done through the commands below. - -- `$ ./update-gke-infra.sh -c change-image -t [tag]` - -## Scaling Turbinia - -### Scaling Turbinia Worker Pods - -Turbinia GKE automatically scales the number of Worker pods based on processing -demand determined by the CPU utilization average across all pods. As demand -increases, the number of pods scale up until the CPU utilization is below a -determined threshold. Once processing is complete, the number of Worker pods -will scale down. The current autoscaling policy is configured in the -[turbinia-autoscale-cpu.yaml](https://github.com/google/turbinia/blob/master/k8s/common/turbinia-autoscale-cpu.yaml) -file. - -There is a default setting of 3 Worker pods to run at any given time with the -ability to scale up to 50 Worker pods across all nodes in the GKE cluster. -In order to update the minimum number of Worker pods running at a given time, -update the `minReplicas` value with the desired number of pods. In order to update -the max number of pods to scale, update the `maxReplicas` value with the desired -number. These changes should be updated in the [turbinia-autoscale-cpu.yaml](https://github.com/google/turbinia/blob/master/k8s/common/turbinia-autoscale-cpu.yaml) -file then applied through the following command. - -- `$ kubectl replace -f turbinia-autoscale-cpu.yaml` - -### Scaling Turbinia Nodes - -Currently, Turbinia does not currently support the autoscaling of nodes in GKE. -There is a default setting of 1 node to run in the GKE cluster. In order to -update the minimum number of nodes running, update the `CLUSTER_NODE_SIZE` value -in [.clusterconfig](https://github.com/google/turbinia/blob/master/k8s/tools/.clusterconfig) -with the desired number of nodes. - -## Helpful K8s Commands - -In addition to using the update-gke-infra.sh script to manage the cluster, the -kubectl CLI can come useful for running administrative commands against the -cluster, to which you can find some useful commands below. -A verbose cheatsheet can also be found [here](https://kubernetes.io/docs/reference/kubectl/cheatsheet/). - -- Authenticating to the cluster (run this before any other kubectl commands) - - - `$ gcloud container clusters get-credentials [cluster-name] --zone [zone] --project [project-name]` - -- Get cluster events - - - `$ kubectl get events` - -- Get Turbinia pods - - - `$ kubectl get pods` - -- Get all pods (includes monitoring pods) - - - `$ kubectl get pods -A` - -- Get all pods and associated nodes - - - `$ kubectl get pods -A -o wide` - -- Get verbose related pod deployment status - - - `$ kubectl describe pod [pod-name]` - -- Get all nodes - - - `$ kubectl get nodes` - -* Get logs from specific pod - - - `$ kubectl logs [pod-name]` - -- SSH into specific pod - - - `$ kubectl exec —-stdin —-tty [pod-name] —- bash` - -- Execute command into specific pod - - - `$ kubectl exec [pod-name] —- [command]` - -- Get Turbinia ConfigMap - - - `$ kubectl get configmap turbinia-config -o json | jq '.data.TURBINIA_CONF' | xargs | base64 -d` - -- Apply k8s yaml file - - - $ `kubectl apply -f [path-to-file]` - -- Replace a k8s yaml file (updates appropriate pods) - - - $ `kubectl replace -f [path-to-file]` - -- Delete a pod - - - $ `kubectl delete pod [pod-name]` - -- Force delete all pods - - - `$ kubectl delete pods —-all —-force —-grace-period=0` - -- Get horizontal scaling numbers (hpa) - - - `$ kubectl get hpa` - -- See how busy (cpu/mem) pods are - - - `$ kubectl top pods` - -- See how busy (cpu/mem) nodes are - - - `$ kubectl top nodes` - -## GKE Load Testing - -If you'd like to perform some performance testing, troubleshooting GKE related issues, -or would like to test out a new features capability within GKE, a load test script is -available for use within `k8s/tools/load-test.sh`. Prior to running, please ensure you -review the script and update any variables for your test. Most importantly, the load test -script does not currently support the creation of test GCP disks and would need to be created -prior to running the script. By default, the script will look for GCP disks with the naming -convention of ``, `i` being a range of `1` and `MAX_DISKS`. Once test data has -been created, you can run the script on any machine or pod that has the Turbinia client -installed and configured to the correct Turbinia GKE instance. Please run the following -command to execute the load test, passing in a path to store the load test results. - -``` -./k8s/tools/load-test.sh /OUTPUT/LOADTEST/RESULTS -``` - -To check for any failed Tasks once the load test is complete. - -``` -turbinia@turbinia-controller-6bfcc5db99-sdpvg:/$ grep "Failed" -A 1 /mnt/turbiniavolume/loadtests/test-disk-25gb-* -/mnt/turbiniavolume/loadtests/test-disk-25gb-1.log:# Failed Tasks -/mnt/turbiniavolume/loadtests/test-disk-25gb-1.log-* None --- -/mnt/turbiniavolume/loadtests/test-disk-25gb-2.log:# Failed Tasks -/mnt/turbiniavolume/loadtests/test-disk-25gb-2.log-* None -``` - -To check for average run times of each request once the load test is complete. - -``` -turbinia@turbinia-controller-6bfcc5db99-sdpvg:/$ tail -n 3 /mnt/turbiniavolume/loadtests/test-disk-25gb-* -==> /mnt/turbiniavolume/loadtests/test-disk-25gb-1.log <== -real 12m7.661s -user 0m5.069s -sys 0m1.253s - -==> /mnt/turbiniavolume/loadtests/test-disk-25gb-2.log <== -real 12m7.489s -user 0m5.069s -sys 0m1.249s -``` - -To check for any issues with disks not properly mounting, within the Turbinia controller, -please trying running `losetup -a` to check attached loop devices, `lsof | grep ` -to check for any remaining file handles left on a loop device or disk. - -## GKE Metrics and Monitoring - -In order to monitor the Turbinia infrastructure within Kubernetes, -we are using the helm chart [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus) -to deploy the Prometheus stack to the cluster. This simplifies the setup required -and automatically deploys Prometheus, Grafana, and Alert Manager to the cluster -through manifest files. - -The Turbinia Server and Workers are instrumented with Prometheus code and expose -application metrics. - -- Service manifest files were created for both the Turbinia [Server](https://github.com/google/turbinia/blob/master/k8s/common/turbinia-server-metrics-service.yaml) and [Worker](https://github.com/google/turbinia/blob/master/k8s/common/turbinia-worker-metrics-service.yaml). -- The files create two services named `turbinia-server-metrics` and `turbinia-worker-metrics` which expose port 9200 to - poll application metrics. -- The Prometheus service, which is listening on port 9090 scrapes these services - for metrics. -- Grafana pulls system and application metrics from Prometheus and displays - dashboards for both os and application metrics. Grafana is listening on port 3000. - -### Connecting to Prometheus instance - -In order to connect to the Prometheus instance, go to the cloud console and -connect to the cluster using cloud shell. Then run the following command to port -forward the Prometheus service. - -- `$ kubectl --namespace monitoring port-forward svc/prometheus-k8s 9090` - -Once port forwarding, on the top right of the cloud shell console next to -“Open Editor” there is an option for “Web Preview”. Click on that then change -the port to 9090. This should then connect you to the Prometheus instance. - -### Connecting to Grafana instance - -In order to connect to the Grafana instance, go to the cloud console and connect -to the cluster using cloud shell. Then run the following command to port forward -the Grafana service. - -- `$ kubectl --namespace monitoring port-forward svc/grafana 11111:3000` - -Once port forwarding, on the top right of the cloud shell console next to -“Open Editor” there is an option for “Web Preview”. Click on that then change -the port to 11111. This should then connect you to the Grafana instance. - -## Grafana and Prometheus config - -This section covers how to update and manage the Grafana and Prometheus instances -for adding new rules and updating the dashboard. - -### Importing a new dashboard into Grafana - -- Login to the Grafana instance -- Click the “+” sign on the left sidebar and then select “import”. -- Then copy/paste the json file from the dashboard you want to import and click “Load”. - -### Exporting a dashboard from Grafana - -- Login to Grafana -- Navigate to the dashboard you’d like to export -- From the dashboard, select the “dashboard Setting” on the upper right corner -- Click on “JSON Model” and copy the contents of the textbox. -- To import this to another dashboard, follow the steps outlined in importing a new dashboard. - -### Updating the Prometheus Config - -To update Prometheus with any additional configuration options, take the -following steps. - -- Clone the github repo [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus) - locally. -- Once cloned, navigate to the [manifests/prometheus-prometheus.yaml](https://github.com/prometheus-operator/kube-prometheus/blob/main/manifests/prometheus-prometheus.yaml) file and make any necessary changes. -- Also ensure that the additional scrape config is added back into the bottom of the file as it’s required for Prometheus to query for Turbinia metrics. - - ``` - additionalScrapeConfigs: - name: additional-scrape-configs - key: prometheus-additional.yaml - ``` - -* Once done, replace the Prometheus config file by running - - `$ kubectl --namespace monitoring replace -f manifests/prometheus-prometheus.yaml` - - Note: The updates should automatically take place - -### Updating Prometheus Rules - -To update the Prometheus rules, take the following steps. - -- Create or update an existing rule file. Please see [here](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/) for great tips on writing recording rules. -- Once your rule has been created, append the rule to the - turbinia-custom-rules.yaml file following a similar format as the other rules. - ``` - - name: [rule-name] - rules: - # Comment describing rule - - record: [record-value] - expr: [expr-value] - ``` -- Once added into the file, update the monitoring rules by running the following - - `$ kubectl --namespace monitoring replace -f turbinia-custom-rules.yaml` - -* Verify that the changes have taken place by navigating to the Prometheus - instance after a few minutes then going to Status -> Rules and searching for the - name of your newly created rule. diff --git a/docs/user/index.rst b/docs/user/index.rst index 7fd53d8cd..7ba3a715d 100644 --- a/docs/user/index.rst +++ b/docs/user/index.rst @@ -6,13 +6,7 @@ User documentation :maxdepth: 3 install - install-gke-celery - install-gke-pubsub - install-gke-monitoring - install-gke-external - install-gcp-pubsub turbinia-local-stack - gke-sre how-it-works api-server turbinia-web-ui diff --git a/docs/user/install-gcp-pubsub.md b/docs/user/install-gcp-pubsub.md deleted file mode 100644 index 98072025c..000000000 --- a/docs/user/install-gcp-pubsub.md +++ /dev/null @@ -1,157 +0,0 @@ -# **Turbinia GCP Installation Instructions** - -## Overview - -These instructions cover the PubSub installation of Turbinia using -[Google Cloud Platform](https://cloud.google.com). This uses -[terraform configs](https://github.com/forseti-security/osdfir-infrastructure) -that are part of the [Forseti Security repository](https://github.com/forseti-security) -to automate deployment of Turbinia into an existing GCP Project. - -## Installation - -The following steps can be performed on any Linux machine (Ubuntu 20.04 -recommended), and [Cloud Shell](https://cloud.google.com/shell/) is one easy way -to get a shell with access to your GCP resources. - -### GCP Project Setup - -- Create or select a Google Cloud Platform project in the - [Google Cloud Console](https://console.cloud.google.com). -- Determine which GCP zone and region that you wish to deploy Turbinia into. - Note that one of the GCP dependencies is Cloud Functions, and that only - works in certain regions, so you will need to deploy in one of - [the supported regions](https://cloud.google.com/functions/docs/locations). -- Install - [google-cloud-sdk](https://cloud.google.com/sdk/docs/quickstart-linux). - - Note: If you are doing this from cloud shell you shouldn't need this - step. -- Run `gcloud auth login` to authenticate. This may require you to copy/paste - url to browser. -- Run `gcloud auth application-default login` - -### Deploy Turbinia - -- Download the - [Terraform CLI from here](https://www.terraform.io/downloads.html). -- Clone the Forseti Security repository and change to the path containing the - configs - - `git clone https://github.com/forseti-security/osdfir-infrastructure/` - - `cd osdfir-infrastructure` -- Configuration - - - By default this will create one Turbinia server instance and one worker - instance. If you want to change the number of workers, edit the - `modules/turbinia/variables.tf` file and set the `turbinia_worker_count` - variable to the number of workers you want to deploy. - - To adjust the GCP zone and region you want to run Turbinia in, edit the - `modules/turbinia/variables.tf` file and change the `gcp_zone` and - `gcp_region` variables as appropriate to reflect your GCP project's - zone and region. - - If you want to use Docker to run Turbinia tasks, please follow the - instructions [here](using-docker.md) to enable Docker. - - Running the following commands will leave some state information under - the current directory, so if you wish to continue to manage the number - of workers via Terraform you should keep this directory for later use. - Alternatively, if you wish to store this information in GCS instead, you - can edit `main.tf` and change the `bucket` parameter to the GCS bucket - you wish to keep this state information in. See the - [Terraform documentation](https://www.terraform.io/docs/commands/index.html) - for more information. - - The current configuration does not enable alert notifications by default. - Please see [here](#grafana-smtp-setup) for instructions. - - If you are running multiple workers on a given host and within containers, ensure - that you are mapping the host `OUTPUT_DIR` path specified in the configuration file - `.turbiniarc` to the containers so that they can properly update the `RESOURCE_STATE_FILE`. - -- Initialize terraform and apply the configuration - - `./deploy.sh --no-timesketch` - - If the `--no-timesketch` parameter is not supplied, Terraform will also - create a [Timesketch](http://timesketch.org) instance in the same - project, and this can be configured to ingest Turbinia timeline - output and report data. See the - [Documentation on this](https://github.com/forseti-security/osdfir-infrastructure) - for more details. - - When prompted for the project name, enter the project you selected - during setup. - -This should result in the appropriate cloud services being enabled and -configured and GCE instances for the server and the worker(s) being started and -configured. The Turbinia configuration file will be deployed on these instances -as `etc/turbinia/turbinia.conf`. If you later want to increase the number of -workers, you can edit the `turbinia/variables.tf` file mentioned above and -re-run `terraform apply` -To use Turbinia you can use the virtual environment that was setup by -the `deploy.sh` script.To activate the virtual environment, run the following -command `source ~/turbinia/bin/activate` and then use `turbiniactl`. For more -information on how to use Turbinia please visit [the user manual](https://github.com/google/turbinia). - -### Client configuration (optional) - -If you want to use the command line tool, you can SSH into the server and run -`turbiniactl` from there. The `turbiniactl` command can be used to submit -Evidence for processing or see the status of existing and previous processing -requests. If you'd prefer to use turbiniactl on a different machine, follow the -following instructions to configure the client. The instructions are based on -using Ubuntu 20.04, though other versions of Linux should be compatible. - -- Follow the steps from GCP Project setup above to install the SDK and - authenticate with gcloud. -- Install some python tooling: - - `apt-get install python3-pip python3-wheel` -- Install the Turbinia client. - - Note: You may want to install this into a virtual-environment with - [venv](https://docs.python.org/3.7/library/venv.html) or - [pipenv](https://pipenv.pypa.io/en/latest/)) to reduce potential - dependency conflicts and isolate these packages into their own - environment. - - `pip3 --user install turbinia` -- If running on the same machine you deployed Turbinia from, you can generate - the config with terraform - - `terraform output turbinia-config > ~/.turbiniarc` -- Otherwise, if you are running from a different machine you'll need to copy - the Turbinia config from the original machine, or from the Turbinia server - from `/etc/turbinia/turbinia.conf`. - -### Grafana SMTP Setup - -If you want to receive alert notifications from Grafana, you'll need to setup a SMTP server for Grafana. To configure a SMTP server, you need to add the following environment variables to `Grafana` `env` section in `osdfir-infrastructure/modules/monitoring/main.tf` - -``` - { - name = "GF_SMTP_ENABLED" - value = "true" - }, { - name = "GF_SMTP_HOST" - value = "smtp.gmail.com:465" # Replace this if you're not using gmail - }, { - name = "GF_SMTP_USER" - value = "" - }, { - name = "GF_SMTP_PASSWORD" - value = "" - }, { - name = "GF_SMTP_SKIP_VERIFY" - value = "true" - }, { - name = "GF_SMTP_FROM_ADDRESS" - value = "" - } - -``` - ---- - -> **NOTE** - -> By default Gmail does not allow [less secure apps](https://support.google.com/accounts/answer/6010255) to authenticate and send emails. For that reason, you'll need to allow less secure apps to access the provided Gmail account. - ---- - -Once completed: - -- login to the Grafana Dashboard. -- Select Alerting and choose "Notification channels". -- Fill the required fields and add the email addresses that will receive notification. -- Click "Test" to test your SMTP setup. -- Once everything is working, click "Save" to save the notification channel. diff --git a/docs/user/install-gke-celery.md b/docs/user/install-gke-celery.md deleted file mode 100644 index 3b48a9d50..000000000 --- a/docs/user/install-gke-celery.md +++ /dev/null @@ -1,107 +0,0 @@ -# Turbinia GKE Celery Installation Instructions - -## Introduction - -In this guide, you will learn how to deploy the Redis implementation of Turbinia using [Google Kubernetes Engine (GKE)](https://cloud.google.com/kubernetes-engine). - -GKE allows Turbinia workers to scale based on processing demand. Currently by scaling based on CPU utilization of Turbinia workers. The GKE architecture closely resembles the [cloud architecture](how-it-works.md). - -At the end of this guide, you will have a newly provisioned GKE cluster, a GCP Filestore instance to store logs -centrally to, a Turbinia GCP service account for metric collection and attaching GCP Disks, and lastly Turbinia -locally running within the cluster. - -### Prerequisites - -- A Google Cloud Account and a project to work from -- The ability to create GCP resources and service accounts -- `gcloud` and `kubectl` locally installed - -## Deployment - -This section covers the steps for deploying a Turbinia GKE environment. - -### Deploying the Turbinia cluster - -- Create or select a Google Cloud Platform project in the - [Google Cloud Console](https://console.cloud.google.com). -- Determine which GCP zone and region that you wish to deploy Turbinia into. -- Review the `.clusterconfig` config file located in `k8s/tools` and please update any of the default values if necessary based on cluster requirements. -- Deploy through the following command: - - `./k8s/tools/deploy-celery-gke.sh` - - **Note this script will create a GKE cluster and GCP resources then deploy Turbinia to the cluster** -- Congrats, you have successfully deployed Turbinia into GKE! In order to make requests into Turbinia at this stage see Making requests locally section below or if you'd like to set up external access to Turbinia via a URL see [install-gke-external](install-gke-external.md). - -### Destroying the Turbinia cluster - -- Run the following command if you'd like to destroy the Turbinia GKE environment: - - `./k8s/tools/destroy-celery-gke.sh` - - **Note this will delete the Turbinia cluster including all processed output and log files as well as associated GCP resources** - -### Networks listed - -The following ports will be exposed as part of deployment: - -- 9200 - To collect Prometheus metrics from the Turbinia endpoints. -- 8000 - the Turbinia API Service and Web UI. -- 8080 - the Oauth2 Proxy Service. - -## Making requests local to the cluster - -If you have not set up external access to Turbinia, you can make a request through the following steps. - -- Connect to the cluster: - -``` -gcloud container clusters get-credentials --zone --project -``` - -- Forward the Turbinia service port locally to your machine: - -``` -kubectl port-forward service/turbinia-api-service 8000:8000 -``` - -- Install the Turbinia client locally on your machine or in a cloud shell console: - -``` -pip3 install turbinia-api-lib -``` - -- Create a processing request via: - -``` -turbinia-client submit GoogleCloudDisk --project --disk_name --zone -``` - -- You can access the Turbinia Web UI via: - -``` -http://localhost:8000 -``` - -## Making requests within a pod in the cluster - -You may also make requests directly from a pod running within the cluster through -the following steps. - -- Connect to the cluster: - -``` -gcloud container clusters get-credentials --zone --project -``` - -- Get a list of running pods: - -``` -kubectl get pods -``` - -- Identify the pod named `turbinia-server-*` or `turbinia-controller-*` and exec into it via: - -``` -kubectl exec --stdin --tty [CONTAINER-NAME] -- bash -``` - -## Monitoring Installation - -Turbinia GKE has the capability to be monitored through Prometheus and Grafana. Please follow the steps outlined under the Monitoring Installation section [here](install-gke-monitoring.md). diff --git a/docs/user/install-gke-external.md b/docs/user/install-gke-external.md deleted file mode 100644 index 5b3d19d7b..000000000 --- a/docs/user/install-gke-external.md +++ /dev/null @@ -1,252 +0,0 @@ -# Turbinia External Access and Authentication Instructions - -## Introduction - -In this guide you will learn how to externally expose the Turbinia API Server and -Web UI. This guide is recommended for users who have already [deployed Turbinia to -a GKE cluster](install-gke-external.md), but would like to access the API Server and -Web UI through an externally available URL instead of port forwarding the -Turbinia service from the cluster. - -### Prerequisites - -- A Google Cloud Account and a GKE cluster with Turbinia deployed -- The ability to create GCP resources -- `gcloud` and `kubectl` locally installed on your machine - -## Deployment - -Please follow the steps below for configuring Turbinia to be externally accessible. - -### 1. Create a static external IP address - -- Create a global static IP address as follows: - -``` -gcloud compute addresses create turbinia-webapps --global -``` - -- You should see the new IP address listed: - -``` -gcloud compute addresses list -``` - -Please see [Configuring an ipv6 address](#configuring-an-ipv6-address) if you -need an ipv6 address instead. - -### 2. Set up domain and DNS - -You will need a domain to host Turbinia on. You can either register a new domain in a registrar -of your choice or use a pre-existing one. - -#### Registration through GCP - -To do so through GCP, search for a domain that you want to register: - -``` -gcloud domains registrations search-domains SEARCH_TERMS -``` - -If the domain is available, register the domain: - -``` -gcloud domains registrations register -``` - -#### Registration through Google Domains - -If you would like to register a domain and update its DNS record through Google -Domains instead, follow the instructions provided [here](https://cert-manager.io/docs/tutorials/getting-started-with-cert-manager-on-google-kubernetes-engine-using-lets-encrypt-for-ingress-ssl/#4-create-a-domain-name-for-your-website). - -#### External Registrar and DNS provider - -You will need to create a DNS `A` record pointing to the external IP address created -above, either through the external provider you registered the domain from -or through GCP as shown below. - -First create the managed DNS zone, replacing the `--dns-name` flag with the domain you registered: - -``` - gcloud dns managed-zones create turbinia-dns --dns-name --description "Turbinia managed DNS" -``` - -Then add the DNS `A` record pointing to the external IP address: - -``` -gcloud dns record-sets create --zone="turbinia-dns" --type="A" --ttl="300" --rrdatas="EXTERNAL_IP" -``` - -DNS can instead be managed through [ExternalDNS](https://github.com/kubernetes-sigs/external-dns), however setup is outside the scope of this guide. - -### 3. Create Oauth2 Application IDs - -Authentication is handled by a proxy utility named [Oauth2 Proxy](https://oauth2-proxy.github.io/oauth2-proxy/). This guide will walk through configuring the Oauth2 Proxy with Google Oauth, -however there are alternative [providers](https://oauth2-proxy.github.io/oauth2-proxy/docs/configuration/oauth_provider) that you may configure instead. - -Two sets of Oauth credentials will be configured as part of this deployment. -One that will be for the Web client and one for the API/Desktop client. - -To create the Web Oauth credentials, take the following steps: - -1. Go to the [Credentials page](https://console.developers.google.com/apis/credentials). -2. Click Create credentials > OAuth client ID. -3. Select the `Web application` application type. -4. Fill in an appropriate Application name. -5. Fill in Authorized JavaScript origins with your domain as `https://` -6. Fill in Authorized redirect URIs with `https:///oauth2/callback` -7. Please make a note of the generated `Client ID` and `Client Secret` for later use. - -To create the API/Desktop Oauth credentials, take the following steps: - -1. Go to the [Credentials page](https://console.developers.google.com/apis/credentials). -2. Click Create credentials > OAuth client ID. -3. Select the `Desktop or Native application` application type. -4. Fill in an appropriate application name. -5. Please make a note of the generated `Client ID` and `Client Secret` for later use. - -You will then need to generate a cookie secret for later use: - -``` -python3 -c 'import os,base64; print(base64.urlsafe_b64encode(os.urandom(32)).decode())' -``` - -With the Turbinia repository cloned to your local machine, cd into the directory we'll be working from: - -``` -wyassine@wyassine:~/turbinia$ cd k8s/tools/ -``` - -Then make a copy of the `oauth2_proxy.cfg` template: - -``` -wyassine@wyassine:~/turbinia/k8s/tools$ cp ../../docker/oauth2_proxy/oauth2_proxy.cfg . -``` - -Edit the `oauth2_proxy.cfg` file and replace the following: - -- `CLIENT_ID`: The web client id -- `CLIENT_SECRET`: The web client secret -- `OIDC_EXTRA_AUDIENCES`: The native client id -- `UPSTREAMS`: The domain name registered, ex: `upstreams = ['https://]` -- `REDIRECT_URL`: The redirect URI you registered ex: `https:///oauth2/callback` -- `COOKIE_SECRET`: The cookie secret you generated above -- `EMAIl_DOMAINS`: The email domain name you'd allow to authenticate ex: `yourcompany.com` - -Now base64 encode the config file: - -``` -base64 -w0 oauth2_native.cfg > oauth2_native.b64 -``` - -Then to deploy the config to the cluster - -``` -kubectl create configmap oauth2-config --from-file=OAUTH2_CONF=oauth2_native.b64 -``` - -Create a file named `auth.txt` in your working directory and append a list of emails -you'd like to allow access to the Turbinia app, one email per line. Once complete base64 encode: - -``` -base64 -w0 auth.txt > auth.b64 -``` - -Then deploy the config to the cluster: - -``` -kubectl create configmap auth-config --from-file=OAUTH2_AUTH_EMAILS=auth.b64 -``` - -Lastly, deploy the Oauth2 Proxy to the cluster: - -``` -kubectl create -f ../celery/turbinia-oauth2-proxy.yaml -``` - -### 4. Deploy the Load Balancer and Managed SSL - -In the final step, edit `turbinia-ingress.yaml` located in the `k8s/celery` directory -and replace the two placeholders `` with the domain you configured. Save -the file then deploy it to the cluster: - -``` -kubectl create -f ../celery/turbinia-ingress.yaml -``` - -Within 10 minutes all the load balancer components should be ready and you should -be able to externally connect to the domain name you configured. Additionally, you can check on the status of the load balancer via: - -``` -kubectl describe ingress turbinia-ingress -``` - -Congrats, you have now successfully configured Turbinia to be externally accessible! - -## Making Turbinia processing requests - -Once Turbinia is externally accessible, download the Oauth Desktop credentials -created above to your machine and install the command-line Turbinia client: - -``` -pip3 install turbinia-client -``` - -or Python client library: - -``` -pip3 install turbinia-api-lib -``` - -- To create a processing request for evidence run the following: - -``` -turbinia-client submit googleclouddisk --project --disk_name --zone -``` - -- To access the Turbinia Web UI, point your browser to: - -``` -https:// -``` - -## Additional networking topics - -### Configuring an ipv6 address - -Please follow these steps if your environment requires an ipv6 address to be -configured instead. - -- Create a ipv6 global static IP address as follows: - -``` -gcloud compute addresses create turbinia-webapps --global --ip-version ipv6 -``` - -- Then add the DNS `AAAA` record pointing to the ipv6 address as follows: - -``` -gcloud dns record-sets create --zone="turbinia-dns" --type="AAAA" --ttl="300" --rrdatas="IPV6_ADDRESS" -``` - -- In the final step, edit `turbinia-ingress.yaml` located in the `k8s/celery` directory - and replace the two placeholders `` with the domain you configured. Save - the file then deploy it to the cluster: - -``` -kubectl create -f ../celery/turbinia-ingress.yaml -``` - -### Egress Connectivity for Nodes - -By default, the deployment script will bootstrap a private GKE cluster. This prevents -nodes from having an external IP address to send and receive external traffic from and -traffic will only be allowed through the deployed load balancer. - -In cases where nodes require external network connectivity or egress to retrieve external -helm and software packages, you'll need to create a [GCP NAT router](https://cloud.google.com/nat/docs/gke-example#create-nat). This allows traffic to be routed externally from the cluster -nodes to the NAT router and then externally while denying inbound traffic, allowing the cluster -nodes to stay private. - -One use case where this may come up is if you choose to deploy ExternalDNS or Certmanager -to the cluster instead of the GCP equivalent for DNS and certificate management. diff --git a/docs/user/install-gke-monitoring.md b/docs/user/install-gke-monitoring.md deleted file mode 100644 index f77af7521..000000000 --- a/docs/user/install-gke-monitoring.md +++ /dev/null @@ -1,119 +0,0 @@ -## **Monitoring Installation** - -Turbinia GKE has the capability to be monitored through Prometheus and Grafana. Please follow these steps for configuring Turbinia for monitoring and ensure that the `.turbiniarc` config file has been updated appropriately. - -### Application Metrics - -In order to receive Turbinia application metrics, you'll need to adjust the following variables in the `.turbinarc` config file. - -``` -PROMETHEUS_ENABLED = True -PROMETHEUS_ADDR = '0.0.0.0' -PROMETHEUS_PORT = 9200 -``` - -Please ensure `PROMETHEUS_ENABLED` is set to `True` and that the `PROMETHEUS_PORT` matches the `prometheus.io/port` section in the `turbinia-worker.yaml` and `turbinia-server.yaml` as well as matching ports in the `turbinia-server-metrics-service.yaml` and `turbinia-worker-metrics-service.yaml` GKE deployment files. - -### Deploying Prometheus - -In this deployment method, we are using [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus) to deploy the Prometheus stack to the cluster. This simplifies the setup required and automatically deploys Prometheus, Grafana, and Alert Manager to the cluster through manifest files. Before proceeding with the setup, please ensure you are connected to the cluster with Turbinia deployed and can run commands via `kubectl`, then proceed to the following steps to configure Prometheus with Turbinia. - -- Clone the github repo [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus) locally. Please ensure that the branch cloned is compatible with your Kubernetes cluster version else you may run into issues. Please see the [Compatibility Matrix](https://github.com/prometheus-operator/kube-prometheus) section of the repo for more details. -- Once cloned, run the following commands to deploy the stack - - `kubectl create -f manifests/setup` - - `kubectl create -f manifests/` -- Create a secret from the file `prometheus-additional.yaml` located in the Turbinia folder. - - `kubectl create secret generic additional-scrape-configs --from-file=monitoring/k8s/prometheus/prometheus-additional.yaml --dry-run=client -oyaml > additional-scrape-configs.yaml` -- You will then need to update the `prometheus-prometheus.yaml` file located in the `kube-prometheus/manifests` folder with this extra scrape config - ``` - additionalScrapeConfigs: - name: additional-scrape-configs - key: prometheus-additional.yaml - ``` -- Once complete apply the changes made through the following commands - - `kubectl -n monitoring apply -f additional-scrape-configs.yaml` - - `kubectl -n monitoring apply -f manifests/prometheus-prometheus.yaml` -- To import Turbinia custom rules, run the `gen-yaml.sh` script from the same directory its located - - `cd monitoring/k8s && ./gen-yaml.sh` -- Then apply the `turbinia-custom-rules.yaml` file - - `kubectl -n monitoring apply -f monitoring/k8s/prometheus/turbinia-custom-rules.yaml` - -### Testing Prometheus Deployment - -- Test that the changes were properly made by connecting to the Prometheus console and searching for `turbinia`. If related metrics pop up in the search bar, then Turbinia metrics are properly being ingested by Prometheus. You can also check to see if the Turbinia custom rules have been applied by navigating to Status -> Rules then searching for one of the custom rule names. To connect to the Prometheus console, run the following command - - - `kubectl -n monitoring port-forward svc/prometheus-k8s 9090` - -- To delete the monitoring stack, cd into the `kube-prometheus` directory and run the following command. - - `kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup` - -### Deploying Grafana - -Before proceeding to the Grafana setup, please ensure that you have followed all the steps outlined in the **Testing Prometheus Deployment** section. - -- Clone the github repo [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus) locally. -- You will then need to update `manifests/grafana-deployment.yaml` file, first by updating the `volumeMounts` section with the following `mountPaths` - ``` - - mountPath: /grafana-dashboard-definitions/0/turbinia-healthcheck-metrics - name: turbinia-healthcheck-metrics - readOnly: false - - mountPath: /grafana-dashboard-definitions/0/turbinia-application-metrics - name: turbinia-application-metrics - readOnly: false - ``` -- Then by updating the `volumes` section with the following `configMaps` - ``` - - configMap: - name: turbinia-application-metrics - name: turbinia-application-metrics - - configMap: - name: turbinia-healthcheck-metrics - name: turbinia-healthcheck-metrics - ``` -- Once complete, apply the changes through - - `kubectl -n monitoring apply -f manifests/grafana-deployment.yaml` -- To get the Turbinia Application & Healthcheck dashboard to show, first run the `gen.yaml.sh` if haven't done so already in the setting up Prometheus section. - - `cd monitoring/k8s && ./gen-yaml.sh` -- Then apply the dashboards to the monitoring namespace. - - `kubectl -n monitoring apply -f monitoring/k8s/grafana` -- To connect to the Grafana dashboard, run the following command - - `kubectl -n monitoring port-forward svc/grafana 11111:3000` - -### Email Notifications - -If you want to receive alert notifications from Grafana, you'll need to setup a SMTP server for Grafana. To configure a SMTP server, you need to add the following environment variables to the `env` section of the `manifests/grafana-deployment.yaml` file. - -``` -- name: GF_SMTP_ENABLED - value: "true" -- name: GF_SMTP_HOST - value: "smtp.gmail.com:465" #Replace this if you're not using gmail -- name: GF_SMTP_USER - value: "" -- name: GF_SMTP_PASSWORD - value: "" -- name: GF_SMTP_SKIP_VERIFY - value: "true" -- name: GF_SMTP_FROM_ADDRESS - value: "" -``` - -Then apply the changes through the following command - -- `kubectl -n monitoring apply -f manifests/grafana-deployment.yaml` - ---- - -> **NOTE** - -> By default Gmail does not allow [less secure apps](https://support.google.com/accounts/answer/6010255) to authenticate and send emails. For that reason, you'll need to allow less secure apps to access the provided Gmail account. - ---- - -Once completed: - -- login to the Grafana Dashboard. -- Select Alerting and choose "Notification channels". -- Fill the required fields and add the email addresses that will receive notification. -- Click "Test" to test your SMTP setup. -- Once everything is working, click "Save" to save the notification channel. diff --git a/docs/user/install-gke-pubsub.md b/docs/user/install-gke-pubsub.md deleted file mode 100644 index db871b599..000000000 --- a/docs/user/install-gke-pubsub.md +++ /dev/null @@ -1,47 +0,0 @@ -# Turbinia GKE Quick Installation Instructions - -## **Introduction** - -These instructions cover the PubSub installation Turbinia using [Google Kubernetes Engine (GKE)](https://cloud.google.com/kubernetes-engine). - -Installing into GKE allows Turbinia Workers to scale based on processing demand. Currently, this is done through scaling on CPU utilization, which is determined when available Turbinia Workers process Tasks and reach a pre-defined CPU threshold. The GKE architecture closely resembles the [cloud architecture](how-it-works.md) with GKE being used to scale Turbinia Woker pods. - -All steps in this document are required for getting Turbinia running on GKE. - -### **Prerequisites** - -GKE is only supported for Google Cloud so a Google Cloud Project is required to work from. - -## **Installation** - -Please follow these steps for deploying Turbinia to GKE. Ensure that the `.clusterconfig` config file has been updated appropriately. - -### **Turbinia GKE Deployment** - -**Follow these steps to deploy Turbinia to GKE.** - -- Create or select a Google Cloud Platform project in the - [Google Cloud Console](https://console.cloud.google.com). -- Determine which GCP zone and region that you wish to deploy Turbinia into. - Note that one of the GCP dependencies is Cloud Functions, and that only - works in certain regions, so you will need to deploy in one of - [the supported regions](https://cloud.google.com/functions/docs/locations). -- Review the `.clusterconfig` config file and please update any of the default values if necessary based on requirements. -- Deploy Turbinia through the following command - - `./k8s/tools/deploy-pubsub-gke.sh` -- The deployment script will automatically enable GCP APIs, create the cluster and GCP resources then deploy Turbinia to the cluster. At the end of the run, you should have a fully functioning Turbinia environment within GKE to use. -- Run the following command if you'd like to cleanup the newly created Turbinia environment - - `./k8s/tools/destroy-pubsub-gke.sh` - - **Note this will delete the Turbinia cluster including all processed output and log files as well as associated GCP resources** - -### **Making processing requests in GKE** - -- You can either make requests via setting up a local `turbiniactl` client or through connecting to the server through the following steps. -- Connect to cluster through `gcloud container clusters get-credentials --zone --project `. -- Use `kubectl get pods` to get a list of running pods. -- Identify the pod named `turbinia-server-*` and exec into it via `kubectl exec --stdin --tty [CONTAINER-NAME] -- bash` -- Use `turbiniactl` to kick off a request to process evidence. - -## **Monitoring Installation** - -Turbinia GKE has the capability to be monitored through Prometheus and Grafana. Please follow the steps outlined under the Monitoring Installation section [here](install-gke-monitoring.md). diff --git a/docs/user/install.md b/docs/user/install.md index e1e4f3177..631112c00 100644 --- a/docs/user/install.md +++ b/docs/user/install.md @@ -1,6 +1,6 @@ **Note**: **_This installation method will be deprecated by the end of 2022. The current recommended method for installing Turbinia is -[here](install-gke-pubsub.md)._** +[here](https://github.com/google/osdfir-infrastructure)._** # **Turbinia Quick Installation Instructions** diff --git a/k8s/celery/destroy-celery.sh b/k8s/celery/destroy-celery.sh deleted file mode 100755 index e26540a48..000000000 --- a/k8s/celery/destroy-celery.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh -# Turbinia GKE Celery/Redis destroy script. -# This script can be used to destroy the Turbinia Celery/Redis deployment in GKE. -# Please use the destroy-celery-gke.sh script if you'd like to also delete -# the cluster and other GCP resources created as part of the deployment. -# Requirements: -# - have 'gcloud' and 'kubectl' installed. -# - authenticate against your GKE cluster with "gcloud container clusters get-credentials" - -kubectl delete configmap turbinia-config -kubectl delete -f redis-server.yaml -kubectl delete -f redis-service.yaml -kubectl delete -f turbinia-autoscale-cpu.yaml -kubectl delete -f turbinia-server-metrics-service.yaml -kubectl delete -f turbinia-worker-metrics-service.yaml -kubectl delete -f turbinia-worker.yaml -kubectl delete -f turbinia-server.yaml -kubectl delete -f turbinia-api-service.yaml -kubectl delete -f turbinia-api-server.yaml -kubectl delete -f turbinia-volume-claim-filestore.yaml -kubectl delete -f turbinia-volume-filestore.yaml \ No newline at end of file diff --git a/k8s/celery/redis-server.yaml b/k8s/celery/redis-server.yaml deleted file mode 100644 index 48c3a09fa..000000000 --- a/k8s/celery/redis-server.yaml +++ /dev/null @@ -1,53 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: redis-server - labels: - app: redis-server -spec: - replicas: 1 - selector: - matchLabels: - app: redis-server - template: - metadata: - labels: - app: redis-server - spec: - automountServiceAccountToken: false - securityContext: - seccompProfile: - type: RuntimeDefault - initContainers: - - name: init-filestore - image: busybox:1.28 - command: ["sh", "-c", "echo never > /host-sys/kernel/mm/transparent_hugepage/enabled"] - volumeMounts: - - mountPath: /mnt/turbiniavolume - name: turbiniavolume - - mountPath: /host-sys - name: host-sys - containers: - - name: redis - image: "docker.io/redis:latest" - args: ["--appendonly", "yes", "--save", "30", "1", "--client-output-buffer-limit", "pubsub", "268435456", "67108864", "0"] - workingDir: /mnt/turbiniavolume/redis - resources: - requests: - cpu: 2000m - memory: 2000Mi - ports: - - containerPort: 6379 - volumeMounts: - - mountPath: /mnt/turbiniavolume - name: turbiniavolume - securityContext: - readOnlyRootFilesystem: true - volumes: - - name: turbiniavolume - persistentVolumeClaim: - claimName: turbiniavolume-claim - readOnly: false - - name: host-sys - hostPath: - path: /sys \ No newline at end of file diff --git a/k8s/celery/redis-service.yaml b/k8s/celery/redis-service.yaml deleted file mode 100644 index c5e46b3ef..000000000 --- a/k8s/celery/redis-service.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: redis - labels: - app: redis-server -spec: - ports: - - port: 6379 - targetPort: 6379 - selector: - app: redis-server \ No newline at end of file diff --git a/k8s/celery/setup-celery.sh b/k8s/celery/setup-celery.sh deleted file mode 100755 index c4c7a3cfa..000000000 --- a/k8s/celery/setup-celery.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -# Turbinia GKE Celery/Redis deployment script. -# This script can be used to deploy Turbinia configured with Celery/Redis to GKE. -# Please use the deploy-celery-gke.sh script if you'd also like to create -# the GKE cluster and associated GCP resources required by Turbinia. -# Requirements: -# - have 'gcloud' and 'kubectl' installed. -# - authenticate against your GKE cluster with "gcloud container clusters get-credentials" - -TURBINIA_CONF=$1 -if [ -z $1 ]; then - echo "No config found as parameter, please specify a Turbinia config file." - exit 0 -fi - -base64 -w0 $TURBINIA_CONF > turbinia-config.b64 -kubectl create configmap turbinia-config --from-file=TURBINIA_CONF=turbinia-config.b64 -kubectl create -f turbinia-volume-filestore.yaml -kubectl create -f turbinia-volume-claim-filestore.yaml -kubectl create -f redis-server.yaml -kubectl create -f redis-service.yaml -kubectl rollout status -w deployment/redis-server -kubectl create -f turbinia-server.yaml -kubectl create -f turbinia-worker.yaml -kubectl create -f turbinia-api-server.yaml -kubectl create -f turbinia-api-service.yaml -kubectl create -f turbinia-server-metrics-service.yaml -kubectl create -f turbinia-worker-metrics-service.yaml -kubectl create -f turbinia-autoscale-cpu.yaml - -echo "Turbinia deployment complete" diff --git a/k8s/celery/turbinia-api-server.yaml b/k8s/celery/turbinia-api-server.yaml deleted file mode 100644 index be088d5d6..000000000 --- a/k8s/celery/turbinia-api-server.yaml +++ /dev/null @@ -1,72 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: turbinia-api-server - labels: - app: turbinia-api-server -spec: - replicas: 1 - selector: - matchLabels: - app: turbinia-api-server - template: - metadata: - annotations: - prometheus.io/port: "9200" - prometheus.io/scrape: "true" - labels: - app: turbinia-api-server - spec: - serviceAccountName: turbinia - automountServiceAccountToken: false - securityContext: - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - runAsUser: 999 - fsGroup: 999 - fsGroupChangePolicy: "OnRootMismatch" - containers: - - name: api - image: us-docker.pkg.dev/osdfir-registry/turbinia/release/turbinia-api-server:latest - env: - - name: TURBINIA_CONF - valueFrom: - configMapKeyRef: - name: turbinia-config - key: TURBINIA_CONF - - name: NODE_NAME - valueFrom: - fieldRef: - fieldPath: spec.nodeName - volumeMounts: - - mountPath: /mnt/turbiniavolume - name: turbiniavolume - - mountPath: /etc/turbinia - name: conf - - mountPath: /var/log - name: logs - ports: - - containerPort: 9200 - - containerPort: 8000 - resources: - requests: - memory: "4096Mi" - cpu: "2000m" - limits: - memory: "16384Mi" - cpu: "4000m" - securityContext: - readOnlyRootFilesystem: true - runAsNonRoot: true - allowPrivilegeEscalation: false - runAsUser: 999 - volumes: - - name: turbiniavolume - persistentVolumeClaim: - claimName: turbiniavolume-claim - readOnly: false - - name: conf - emptyDir: {} - - name: logs - emptyDir: {} \ No newline at end of file diff --git a/k8s/celery/turbinia-api-service.yaml b/k8s/celery/turbinia-api-service.yaml deleted file mode 100644 index 4ae6f7ac4..000000000 --- a/k8s/celery/turbinia-api-service.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: turbinia-api-service - labels: - app: turbinia-api-service -spec: - ports: - - name: svc - port: 8000 - targetPort: 8000 - - name: metrics - port: 9200 - targetPort: 9200 - selector: - app: turbinia-api-server \ No newline at end of file diff --git a/k8s/celery/turbinia-iap.yaml b/k8s/celery/turbinia-iap.yaml deleted file mode 100644 index f019f4fda..000000000 --- a/k8s/celery/turbinia-iap.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: cloud.google.com/v1 -kind: BackendConfig -metadata: - name: turbinia-iap -spec: - iap: - enabled: true - oauthclientCredentials: - secretName: oauth-secret \ No newline at end of file diff --git a/k8s/celery/turbinia-ingress.yaml b/k8s/celery/turbinia-ingress.yaml deleted file mode 100644 index 895a2aafb..000000000 --- a/k8s/celery/turbinia-ingress.yaml +++ /dev/null @@ -1,57 +0,0 @@ -apiVersion: cloud.google.com/v1 -kind: BackendConfig -metadata: - name: turbinia-neg-healthcheck -spec: - timeoutSec: 300 - healthCheck: - checkIntervalSec: 5 - timeoutSec: 5 - healthyThreshold: 2 - unhealthyThreshold: 2 - type: HTTP - requestPath: /ping - port: 8080 ---- -apiVersion: networking.gke.io/v1beta1 -kind: FrontendConfig -metadata: - name: turbinia-loadbalancer-frontend-config -spec: - redirectToHttps: - enabled: true ---- -apiVersion: networking.gke.io/v1 -kind: ManagedCertificate -metadata: - name: turbinia-loadbalancer-managed-ssl -spec: - domains: - - ---- -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: turbinia-ingress - annotations: - kubernetes.io/ingress.global-static-ip-name: "turbinia-webapps" - networking.gke.io/managed-certificates: turbinia-loadbalancer-managed-ssl - networking.gke.io/v1beta1.FrontendConfig: turbinia-loadbalancer-frontend-config - kubernetes.io/ingress.class: "gce" -spec: - rules: - - host: - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: turbinia-oauth2-service - port: - number: 8080 - defaultBackend: - service: - name: turbinia-oauth2-service # Name of the Service targeted by the Ingress - port: - number: 8080 # Should match the port used by the Service \ No newline at end of file diff --git a/k8s/celery/turbinia-oauth2-proxy.yaml b/k8s/celery/turbinia-oauth2-proxy.yaml deleted file mode 100644 index 8237f7256..000000000 --- a/k8s/celery/turbinia-oauth2-proxy.yaml +++ /dev/null @@ -1,78 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: turbinia-oauth2-proxy - labels: - app: turbinia-oauth2-proxy -spec: - replicas: 1 - selector: - matchLabels: - app: turbinia-oauth2-proxy - template: - metadata: - labels: - app: turbinia-oauth2-proxy - spec: - automountServiceAccountToken: false - securityContext: - runAsNonRoot: true - runAsUser: 999 - seccompProfile: - type: RuntimeDefault - containers: - - name: oauth2-proxy - image: us-docker.pkg.dev/osdfir-registry/turbinia/release/turbinia-oauth2:latest - env: - - name: OAUTH2_CONF - valueFrom: - configMapKeyRef: - name: oauth2-config - key: OAUTH2_CONF - - name: OAUTH2_AUTH_EMAILS - valueFrom: - configMapKeyRef: - name: auth-config - key: OAUTH2_AUTH_EMAILS - ports: - - containerPort: 8080 - - containerPort: 9200 - resources: - requests: - memory: "256Mi" - cpu: "500m" - limits: - memory: "8192Mi" - cpu: "4000m" - volumeMounts: - - name: tmp - mountPath: /tmp - - name: conf - mountPath: /etc/turbinia - securityContext: - readOnlyRootFilesystem: true - runAsNonRoot: true - allowPrivilegeEscalation: false - runAsUser: 999 - volumes: - - name: tmp - emptyDir: {} - - name: conf - emptyDir: {} ---- -apiVersion: v1 -kind: Service -metadata: - name: turbinia-oauth2-service - annotations: - cloud.google.com/neg: '{"ingress": true}' - cloud.google.com/backend-config: '{"ports": {"8080":"turbinia-neg-healthcheck"}}' -spec: - type: ClusterIP - selector: - app: turbinia-oauth2-proxy - ports: - - name: oauth2-http - port: 8080 - protocol: TCP - targetPort: 8080 \ No newline at end of file diff --git a/k8s/common/turbinia-autoscale-cpu.yaml b/k8s/common/turbinia-autoscale-cpu.yaml deleted file mode 100644 index 4684688df..000000000 --- a/k8s/common/turbinia-autoscale-cpu.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: autoscaling/v1 -kind: HorizontalPodAutoscaler -metadata: - name: turbinia-worker-autoscaling -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: turbinia-worker - minReplicas: 5 - maxReplicas: 400 - targetCPUUtilizationPercentage: 90 diff --git a/k8s/common/turbinia-controller.yaml b/k8s/common/turbinia-controller.yaml deleted file mode 100644 index 2ba2fb3f5..000000000 --- a/k8s/common/turbinia-controller.yaml +++ /dev/null @@ -1,69 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: turbinia-controller - labels: - app: turbinia-controller -spec: - replicas: 1 - selector: - matchLabels: - app: turbinia-controller - template: - metadata: - annotations: - prometheus.io/port: "9200" - prometheus.io/scrape: "true" - labels: - app: turbinia-controller - spec: - serviceAccountName: turbinia - # The grace period needs to be set to the largest task timeout as - # set in the turbinia configuration file. - initContainers: - - name: init-filestore - image: busybox:1.28 - command: ['sh', '-c', 'chmod go+w /mnt/turbiniavolume'] - volumeMounts: - - mountPath: "/mnt/turbiniavolume" - name: turbiniavolume - containers: - - name: controller - image: us-docker.pkg.dev/osdfir-registry/turbinia/release/turbinia-controller:latest - securityContext: - privileged: true - env: - - name: TURBINIA_CONF - valueFrom: - configMapKeyRef: - name: turbinia-config - key: TURBINIA_CONF - - name: TURBINIA_EXTRA_ARGS - value: "-d" - - name: NODE_NAME - valueFrom: - fieldRef: - fieldPath: spec.nodeName - volumeMounts: - - mountPath: "/var/run/lock" - name: lockfolder - readOnly: false - - mountPath: /mnt/turbiniavolume - name: turbiniavolume - ports: - - containerPort: 9200 - resources: - requests: - memory: "256Mi" - cpu: "500m" - limits: - memory: "8192Mi" - cpu: "32000m" - volumes: - - name: lockfolder - hostPath: - path: /var/run/lock - - name: turbiniavolume - persistentVolumeClaim: - claimName: turbiniavolume-claim - readOnly: false diff --git a/k8s/common/turbinia-server-metrics-service.yaml b/k8s/common/turbinia-server-metrics-service.yaml deleted file mode 100644 index 8c58c62b9..000000000 --- a/k8s/common/turbinia-server-metrics-service.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: turbinia-server-metrics - labels: - app: turbinia-server-metrics -spec: - ports: - - port: 9200 - targetPort: 9200 - selector: - app: turbinia-server \ No newline at end of file diff --git a/k8s/common/turbinia-server.yaml b/k8s/common/turbinia-server.yaml deleted file mode 100644 index 7d83cb15d..000000000 --- a/k8s/common/turbinia-server.yaml +++ /dev/null @@ -1,59 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: turbinia-server - labels: - app: turbinia-server -spec: - replicas: 1 - selector: - matchLabels: - app: turbinia-server - template: - metadata: - annotations: - prometheus.io/port: "9200" - prometheus.io/scrape: "true" - labels: - app: turbinia-server - spec: - serviceAccountName: turbinia - initContainers: - - name: init-filestore - image: busybox:1.28 - command: ['sh', '-c', 'chmod go+w /mnt/turbiniavolume'] - volumeMounts: - - mountPath: "/mnt/turbiniavolume" - name: turbiniavolume - containers: - - name: server - image: us-docker.pkg.dev/osdfir-registry/turbinia/release/turbinia-server:latest - env: - - name: TURBINIA_CONF - valueFrom: - configMapKeyRef: - name: turbinia-config - key: TURBINIA_CONF - - name: TURBINIA_EXTRA_ARGS - value: "-d" - - name: NODE_NAME - valueFrom: - fieldRef: - fieldPath: spec.nodeName - volumeMounts: - - mountPath: /mnt/turbiniavolume - name: turbiniavolume - ports: - - containerPort: 9200 - resources: - requests: - memory: "256Mi" - cpu: "500m" - limits: - memory: "8192Mi" - cpu: "4000m" - volumes: - - name: turbiniavolume - persistentVolumeClaim: - claimName: turbiniavolume-claim - readOnly: false \ No newline at end of file diff --git a/k8s/common/turbinia-volume-claim-filestore.yaml b/k8s/common/turbinia-volume-claim-filestore.yaml deleted file mode 100644 index 1fd326cc6..000000000 --- a/k8s/common/turbinia-volume-claim-filestore.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: turbiniavolume-claim -spec: - accessModes: - - ReadWriteMany - storageClassName: "" - volumeName: turbiniavolume - resources: - requests: - storage: 1T \ No newline at end of file diff --git a/k8s/common/turbinia-volume-filestore.yaml b/k8s/common/turbinia-volume-filestore.yaml deleted file mode 100644 index 1b95ef1ac..000000000 --- a/k8s/common/turbinia-volume-filestore.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 -kind: PersistentVolume -metadata: - name: turbiniavolume -spec: - capacity: - storage: 1T - accessModes: - - ReadWriteMany - nfs: - path: /turbiniavolume - server: \ No newline at end of file diff --git a/k8s/common/turbinia-worker-metrics-service.yaml b/k8s/common/turbinia-worker-metrics-service.yaml deleted file mode 100644 index 6dd22adf9..000000000 --- a/k8s/common/turbinia-worker-metrics-service.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: turbinia-worker-metrics - labels: - app: turbinia-worker-metrics -spec: - ports: - - port: 9200 - targetPort: 9200 - selector: - app: turbinia-worker \ No newline at end of file diff --git a/k8s/common/turbinia-worker.yaml b/k8s/common/turbinia-worker.yaml deleted file mode 100644 index 962613f8a..000000000 --- a/k8s/common/turbinia-worker.yaml +++ /dev/null @@ -1,83 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: turbinia-worker - labels: - app: turbinia-worker -spec: - replicas: 5 - selector: - matchLabels: - app: turbinia-worker - template: - metadata: - annotations: - prometheus.io/port: "9200" - prometheus.io/scrape: "true" - labels: - app: turbinia-worker - spec: - serviceAccountName: turbinia - # The grace period needs to be set to the largest task timeout as - # set in the turbinia configuration file. - terminationGracePeriodSeconds: 86400 - initContainers: - - name: init-filestore - image: busybox:1.28 - command: ['sh', '-c', 'chmod go+w /mnt/turbiniavolume'] - volumeMounts: - - mountPath: "/mnt/turbiniavolume" - name: turbiniavolume - containers: - - name: worker - image: us-docker.pkg.dev/osdfir-registry/turbinia/release/turbinia-worker:latest - lifecycle: - preStop: - exec: - command: - - "/bin/sh" - - "-c" - - "touch /tmp/turbinia-to-scaledown.lock && sleep 5 && /usr/bin/python3 /home/turbinia/check-lockfile.py" - securityContext: - privileged: true - env: - - name: TURBINIA_CONF - valueFrom: - configMapKeyRef: - name: turbinia-config - key: TURBINIA_CONF - - name: TURBINIA_EXTRA_ARGS - value: "-d" - - name: NODE_NAME - valueFrom: - fieldRef: - fieldPath: spec.nodeName - volumeMounts: - - mountPath: "/dev" - name: dev - readOnly: true - - mountPath: "/var/run/lock" - name: lockfolder - readOnly: false - - mountPath: /mnt/turbiniavolume - name: turbiniavolume - ports: - - containerPort: 9200 - resources: - requests: - memory: "2048Mi" - cpu: "1500m" - limits: - memory: "65536Mi" - cpu: "31000m" - volumes: - - name: dev - hostPath: - path: /dev - - name: lockfolder - hostPath: - path: /var/run/lock - - name: turbiniavolume - persistentVolumeClaim: - claimName: turbiniavolume-claim - readOnly: false diff --git a/k8s/dfdewey/dfdewey-volume-claim-filestore.yaml b/k8s/dfdewey/dfdewey-volume-claim-filestore.yaml deleted file mode 100644 index f3331a89c..000000000 --- a/k8s/dfdewey/dfdewey-volume-claim-filestore.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: dfdeweyvolume-claim -spec: - accessModes: - - ReadWriteMany - storageClassName: "" - volumeName: dfdeweyvolume - resources: - requests: - storage: diff --git a/k8s/dfdewey/dfdewey-volume-filestore.yaml b/k8s/dfdewey/dfdewey-volume-filestore.yaml deleted file mode 100644 index 0a4deed54..000000000 --- a/k8s/dfdewey/dfdewey-volume-filestore.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 -kind: PersistentVolume -metadata: - name: dfdeweyvolume -spec: - capacity: - storage: - accessModes: - - ReadWriteMany - nfs: - path: / - server: diff --git a/k8s/dfdewey/opensearch-configmap.yaml b/k8s/dfdewey/opensearch-configmap.yaml deleted file mode 100644 index 158b31b47..000000000 --- a/k8s/dfdewey/opensearch-configmap.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: opensearch-config - labels: - app: opensearch -data: - discovery.type: single-node - plugins.security.disabled: "true" - OPENSEARCH_JAVA_OPTS: -Xms32g -Xmx32g - network.host: 0.0.0.0 diff --git a/k8s/dfdewey/opensearch-server.yaml b/k8s/dfdewey/opensearch-server.yaml deleted file mode 100644 index 626414b0c..000000000 --- a/k8s/dfdewey/opensearch-server.yaml +++ /dev/null @@ -1,48 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: dfdewey-opensearch -spec: - replicas: 1 - selector: - matchLabels: - app: dfdewey-opensearch - template: - metadata: - labels: - app: dfdewey-opensearch - spec: - securityContext: - fsGroup: 1000 - containers: - - name: opensearch - image: opensearchproject/opensearch:latest - resources: - requests: - memory: "32Gi" - ports: - - containerPort: 9200 - envFrom: - - configMapRef: - name: opensearch-config - volumeMounts: - - mountPath: /usr/share/opensearch/data - name: dfdeweyvolume - subPath: - initContainers: - - name: opensearch-init - image: busybox:latest - volumeMounts: - - mountPath: /usr/share/opensearch/data - name: dfdeweyvolume - subPath: - securityContext: - privileged: true - command: ['sh', '-c', "chown -R 1000:1000 /usr/share/opensearch/data; sysctl -w vm.max_map_count=262144; sysctl -p"] - volumes: - - name: dfdeweyvolume - persistentVolumeClaim: - claimName: dfdeweyvolume-claim - readOnly: false - nodeSelector: - cloud.google.com/gke-nodepool: default-pool diff --git a/k8s/dfdewey/opensearch-service.yaml b/k8s/dfdewey/opensearch-service.yaml deleted file mode 100644 index 41cd80503..000000000 --- a/k8s/dfdewey/opensearch-service.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: dfdewey-opensearch - labels: - app: dfdewey-opensearch -spec: - type: NodePort - ports: - - port: 9200 - selector: - app: dfdewey-opensearch diff --git a/k8s/dfdewey/postgres-configmap.yaml b/k8s/dfdewey/postgres-configmap.yaml deleted file mode 100644 index 5bce99792..000000000 --- a/k8s/dfdewey/postgres-configmap.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: postgres-config - labels: - app: postgres -data: - PGDATA: /var/lib/postgresql/data/dfdewey/ - POSTGRES_USER: dfdewey - POSTGRES_PASSWORD: password diff --git a/k8s/dfdewey/postgres-server.yaml b/k8s/dfdewey/postgres-server.yaml deleted file mode 100644 index 89ee4eb22..000000000 --- a/k8s/dfdewey/postgres-server.yaml +++ /dev/null @@ -1,33 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: dfdewey-postgres -spec: - replicas: 1 - selector: - matchLabels: - app: dfdewey-postgres - template: - metadata: - labels: - app: dfdewey-postgres - spec: - containers: - - name: postgres - image: postgres:latest - ports: - - containerPort: 5432 - envFrom: - - configMapRef: - name: postgres-config - volumeMounts: - - mountPath: /var/lib/postgresql/data - name: dfdeweyvolume - subPath: - volumes: - - name: dfdeweyvolume - persistentVolumeClaim: - claimName: dfdeweyvolume-claim - readOnly: false - nodeSelector: - cloud.google.com/gke-nodepool: default-pool diff --git a/k8s/dfdewey/postgres-service.yaml b/k8s/dfdewey/postgres-service.yaml deleted file mode 100644 index 396ad5759..000000000 --- a/k8s/dfdewey/postgres-service.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: dfdewey-postgres - labels: - app: dfdewey-postgres -spec: - type: NodePort - ports: - - port: 5432 - selector: - app: dfdewey-postgres diff --git a/k8s/dfdewey/setup-dfdewey.sh b/k8s/dfdewey/setup-dfdewey.sh deleted file mode 100755 index 50bddb234..000000000 --- a/k8s/dfdewey/setup-dfdewey.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/sh -# Turbinia dfDewey GKE deployment script -# This script can be used to deploy dfDewey to Turbinia in GKE. -# Requirements: -# - have 'gcloud' installed. -# - authenticate against your GKE cluster with "gcloud container clusters get-credentials" - -echo "Deploying dfDewey datastores" -TURBINIA_CONF=$1 -if [ -z $1 ]; then - echo "No config found as parameter, please specify a Turbinia config file." - exit 0 -fi - -kubectl create -f dfdewey-volume-filestore.yaml -kubectl create -f dfdewey-volume-claim-filestore.yaml - -# PostgreSQL -kubectl create -f postgres-configmap.yaml -kubectl create -f postgres-server.yaml -kubectl create -f postgres-service.yaml - -# Opensearch -kubectl create -f opensearch-configmap.yaml -kubectl create -f opensearch-server.yaml -kubectl create -f opensearch-service.yaml - -# Update Turbinia config -DFDEWEY_PG_IP=$(kubectl get -o jsonpath='{.spec.clusterIP}' service dfdewey-postgres) -DFDEWEY_OS_IP=$(kubectl get -o jsonpath='{.spec.clusterIP}' service dfdewey-opensearch) -sed -i -e "s/^DFDEWEY_PG_HOST = .*$/DFDEWEY_PG_HOST = \'$DFDEWEY_PG_IP\'/g" $TURBINIA_CONF -sed -i -e "s/^DFDEWEY_OS_HOST = .*$/DFDEWEY_OS_HOST = \'$DFDEWEY_OS_IP\'/g" $TURBINIA_CONF -base64 -w0 $TURBINIA_CONF > turbinia-config.b64 -kubectl create configmap turbinia-config --from-file=TURBINIA_CONF=turbinia-config.b64 --dry-run=client -o yaml | kubectl apply -f - - -# Restart server and worker -kubectl rollout restart -f turbinia-server.yaml -kubectl rollout restart -f turbinia-worker.yaml - -echo "dfDewey datastore deployment complete" diff --git a/k8s/gcp-pubsub/destroy-pubsub.sh b/k8s/gcp-pubsub/destroy-pubsub.sh deleted file mode 100755 index 691621d6b..000000000 --- a/k8s/gcp-pubsub/destroy-pubsub.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -# Turbinia GKE Pubsub destroy script. -# This script can be used to destroy the Turbinia Pubsub deployment in GKE. -# Please use the destroy-pubsub-gke.sh script if you'd like to also delete -# the cluster and other GCP resources created as part of the deployment. -# Requirements: -# - have 'gcloud' and 'kubectl' installed. -# - authenticate against your GKE cluster with "gcloud container clusters get-credentials" - -kubectl delete configmap turbinia-config -kubectl delete -f turbinia-autoscale-cpu.yaml -kubectl delete -f turbinia-server-metrics-service.yaml -kubectl delete -f turbinia-worker-metrics-service.yaml -kubectl delete -f turbinia-worker.yaml -kubectl delete -f turbinia-server.yaml -kubectl delete -f turbinia-volume-claim-filestore.yaml -kubectl delete -f turbinia-volume-filestore.yaml \ No newline at end of file diff --git a/k8s/gcp-pubsub/setup-pubsub.sh b/k8s/gcp-pubsub/setup-pubsub.sh deleted file mode 100755 index 6ec149b6b..000000000 --- a/k8s/gcp-pubsub/setup-pubsub.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh -# Turbinia GKE Pubsub deployment script. -# This script can be used to deploy Turbinia configured with Pubsub to GKE. -# Please use the deploy-celery-gke.sh script if you'd also like to create -# the GKE cluster and associated GCP resources required by Turbinia. -# Requirements: -# - have 'gcloud' and 'kubectl' installed. -# - authenticate against your GKE cluster with "gcloud container clusters get-credentials" - -TURBINIA_CONF=$1 -if [ -z $1 ]; then - echo "No config found as parameter, please specify a Turbinia config file." - exit 0 -fi - -base64 -w0 $TURBINIA_CONF > turbinia-config.b64 -kubectl create configmap turbinia-config --from-file=TURBINIA_CONF=turbinia-config.b64 -kubectl create -f turbinia-volume-filestore.yaml -kubectl create -f turbinia-volume-claim-filestore.yaml -kubectl create -f turbinia-server-metrics-service.yaml -kubectl create -f turbinia-worker-metrics-service.yaml -kubectl create -f turbinia-server.yaml -kubectl create -f turbinia-worker.yaml -kubectl create -f turbinia-autoscale-cpu.yaml - -echo "Turbinia deployment complete" diff --git a/k8s/tools/.clusterconfig b/k8s/tools/.clusterconfig deleted file mode 100644 index 3a5cdf9e6..000000000 --- a/k8s/tools/.clusterconfig +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -# Turbinia parameters for Google Cloud Kubernetes deployment. Please review -# the default configuration and update if necessary based on billing restrictions -# or quota requirements. - -# A unique ID per Turbinia instance. Used for keeping multiple Turbinia instances -# seperate and to name newly created GCP resources such as the cluster name. -INSTANCE_ID='turbinia-main' - -# The Turbinia config name -TURBINIA_CONFIG='.turbiniarc' - -# Folder to save configured Deployment files to. Please use an absolute path else -# the directory will default to within the root of the Turbinia k8s folder. -DEPLOYMENT_FOLDER="deployment/$INSTANCE_ID" - -# The region and zone where Turbinia will run. Note that Turbinia does -# not currently support multi-zone operation. -ZONE='us-central1-f' -REGION='us-central1' -DATASTORE_REGION='us-central' - -# VPC network to configure the cluster in. -VPC_NETWORK='default' - -# Control plane IP range for the control pane VPC. Due to the Turbinia -# cluster being private, this is required for the control pane and cluster -# to communicate privately. -VPC_CONTROL_PANE='172.16.0.0/28' # Set to default - -# The cluster name, number of minimum and maximum nodes, machine type and disk -# size of the deployed cluster and nodes within it. -CLUSTER_NAME=$INSTANCE_ID -CLUSTER_MIN_NODE_SIZE='1' -CLUSTER_MAX_NODE_SIZE='20' -CLUSTER_MACHINE_TYPE='e2-standard-32' -CLUSTER_MACHINE_SIZE='200' - -# The Filestore share name, and size. Filestore will be used to retain shared output -# from Turbinia, such as logs. Please specify size in terabytes(TB). -FILESTORE_NAME='turbiniavolume' -FILESTORE_CAPACITY='10T' - -# Filestore share names, and sizes for dfDewey datastores (if deployed). -FILESTORE_DFDEWEY_NAME='dfdeweyvolume' -FILESTORE_DFDEWEY_CAPACITY='6T' -FILESTORE_PG_PATH='postgres' -FILESTORE_OS_PATH='opensearch' - -# Any Jobs added to this list will be disabled by default at start-up. Job names -# entered here are case insensitive, but must be quoted. -DISABLED_JOBS="['BinaryExtractorJob', 'BulkExtractorJob', 'HindsightJob', 'PhotorecJob', 'VolatilityJob']" \ No newline at end of file diff --git a/k8s/tools/deploy-celery-gke.sh b/k8s/tools/deploy-celery-gke.sh deleted file mode 100755 index d56ed2ed7..000000000 --- a/k8s/tools/deploy-celery-gke.sh +++ /dev/null @@ -1,257 +0,0 @@ -#!/bin/bash -# Turbinia GKE deployment script. -# This script can be used to deploy the Turbinia Celery stack to GKE. -# Requirements: -# - have 'gcloud' and 'kubectl' installed. -# - authenticate against your GCP project with "gcloud auth login" -# - account being used to run script should have an IAM policy of instance.admin and container.admin used to create the necessary resources. -# - optionally have the GCP project set with "gcloud config set project [you-project-name]" -# -# Use --help to show you commands supported. - -set -o posix -set -e - -# Source cluster config to pull specs to create cluster from. Please review -# the config file and make any necessary changes prior to executing this script -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -source $DIR/.clusterconfig -cd $DIR/.. - -if [[ "$*" == *--help || "$*" == *-h ]] ; then - echo "Turbinia deployment script for Kubernetes environment" - echo "Options:" - echo "--build-dev Deploy Turbinia development docker image" - echo "--build-experimental Deploy Turbinia experimental docker image" - echo "--no-cluster Do not create the cluster" - echo "--no-filestore Do not deploy Turbinia Filestore" - echo "--no-node-autoscale Do not enable Node autoscaling" - echo "--deploy-controller Deploy Turbinia controller for load testing and troubleshooting" - echo "--deploy-dfdewey Deploy dfDewey datastores" - exit 1 -fi - -# Check if gcloud is installed -if [[ -z "$( which gcloud )" ]] ; then - echo "gcloud CLI not found. Please follow the instructions at " - echo "https://cloud.google.com/sdk/docs/install to install the gcloud " - echo "package first." - exit 1 -fi - -# Check if kubectl is installed -if [[ -z "$( which kubectl )" ]] ; then - echo "kubectl CLI not found. Please follow the instructions at " - echo "https://kubernetes.io/docs/tasks/tools/ to install the kubectl " - echo "package first." - exit 1 -fi - -# Check configured gcloud project -if [[ -z "$DEVSHELL_PROJECT_ID" ]] ; then - DEVSHELL_PROJECT_ID=$(gcloud config get-value project) - ERRMSG="ERROR: Could not get configured project. Please either restart " - ERRMSG+="Google Cloudshell, or set configured project with " - ERRMSG+="'gcloud config set project PROJECT' when running outside of Cloudshell." - if [[ -z "$DEVSHELL_PROJECT_ID" ]] ; then - echo $ERRMSG - exit 1 - fi - echo "Environment variable \$DEVSHELL_PROJECT_ID was not set at start time " - echo "so attempting to get project config from gcloud config." - echo -n "Do you want to use $DEVSHELL_PROJECT_ID as the target project? (y / n) > " - read response - if [[ $response != "y" && $response != "Y" ]] ; then - echo $ERRMSG - exit 1 - fi -fi - -# TODO: Do real check to make sure credentials have adequate roles -if [[ $( gcloud -q --project $DEVSHELL_PROJECT_ID auth list --filter="status:ACTIVE" --format="value(account)" | wc -l ) -eq 0 ]] ; then - echo "No gcloud credentials found. Use 'gcloud auth login' and 'gcloud auth application-default login' to log in" - exit 1 -fi - -# Enable IAM services -gcloud -q --project $DEVSHELL_PROJECT_ID services enable iam.googleapis.com - -# Create Turbinia service account with necessary IAM roles. The service account will be used at -# container runtime in order to have the necessary permissions to attach and detach GCP disks as -# well as write to stackdriver logging and error reporting. -SA_NAME="turbinia" -SA_MEMBER="serviceAccount:$SA_NAME@$DEVSHELL_PROJECT_ID.iam.gserviceaccount.com" -if [[ -z "$(gcloud -q --project $DEVSHELL_PROJECT_ID iam service-accounts list --format='value(name)' --filter=name:/$SA_NAME@)" ]] ; then - gcloud --project $DEVSHELL_PROJECT_ID iam service-accounts create "${SA_NAME}" --display-name "${SA_NAME}" - # Grant IAM roles to the service account - echo "Grant permissions on service account" - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/compute.instanceAdmin' - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/logging.logWriter' - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/errorreporting.writer' - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/iam.serviceAccountUser' -fi - -echo "Enabling Compute API" -gcloud -q --project $DEVSHELL_PROJECT_ID services enable compute.googleapis.com - -# Check if the configured VPC network exists. -networks=$(gcloud -q --project $DEVSHELL_PROJECT_ID compute networks list --filter="name=$VPC_NETWORK" |wc -l) -if [[ "${networks}" -lt "2" ]]; then - echo "ERROR: VPC network $VPC_NETWORK not found, please create this first." - exit 1 -fi - -# Update Docker image if flag was provided else use default -if [[ "$*" == *--build-dev* ]] ; then - TURBINIA_SERVER_IMAGE="us-docker.pkg.dev\/osdfir-registry\/turbinia\/release\/turbinia-server-dev:latest" - TURBINIA_WORKER_IMAGE="us-docker.pkg.dev\/osdfir-registry\/turbinia\/release\/turbinia-worker-dev:latest" -elif [[ "$*" == *--build-experimental* ]] ; then - TURBINIA_SERVER_IMAGE="us-docker.pkg.dev\/osdfir-registry\/turbinia\/release\/turbinia-server-experimental:latest" - TURBINIA_WORKER_IMAGE="us-docker.pkg.dev\/osdfir-registry\/turbinia\/release\/turbinia-worker-experimental:latest" -fi - -echo "Setting docker image to $TURBINIA_SERVER_IMAGE and $TURBINIA_WORKER_IMAGE" -echo "Deploying cluster to project $DEVSHELL_PROJECT_ID" - -# Setup appropriate directories and copy of deployment templates and Turbinia config -echo "Copying over template deployment files to $DEPLOYMENT_FOLDER" -mkdir -p $DEPLOYMENT_FOLDER -cp common/* $DEPLOYMENT_FOLDER -cp celery/* $DEPLOYMENT_FOLDER -if [[ "$*" == *--deploy-dfdewey* ]] ; then - cp dfdewey/* $DEPLOYMENT_FOLDER -fi -cp ../turbinia/config/turbinia_config_tmpl.py $DEPLOYMENT_FOLDER/$TURBINIA_CONFIG - -# Create GKE cluster and authenticate to it -if [[ "$*" != *--no-cluster* ]] ; then - echo "Enabling Container API" - gcloud -q --project $DEVSHELL_PROJECT_ID services enable container.googleapis.com - if [[ "$*" != *--no-node-autoscale* ]] ; then - echo "Creating cluster $CLUSTER_NAME with a minimum node size of $CLUSTER_MIN_NODE_SIZE to scale up to a maximum node size of $CLUSTER_MAX_NODE_SIZE. Each node will be configured with a machine type $CLUSTER_MACHINE_TYPE and disk size of $CLUSTER_MACHINE_SIZE" - gcloud -q --project $DEVSHELL_PROJECT_ID container clusters create $CLUSTER_NAME --machine-type $CLUSTER_MACHINE_TYPE --disk-size $CLUSTER_MACHINE_SIZE --num-nodes $CLUSTER_MIN_NODE_SIZE --master-ipv4-cidr $VPC_CONTROL_PANE --network $VPC_NETWORK --zone $ZONE --shielded-secure-boot --shielded-integrity-monitoring --no-enable-master-authorized-networks --enable-private-nodes --enable-ip-alias --scopes "https://www.googleapis.com/auth/cloud-platform" --labels "turbinia-infra=true" --workload-pool=$DEVSHELL_PROJECT_ID.svc.id.goog --default-max-pods-per-node=20 --enable-autoscaling --min-nodes=$CLUSTER_MIN_NODE_SIZE --max-nodes=$CLUSTER_MAX_NODE_SIZE - else - echo "--no-node-autoscale specified. Node size will remain constant at $CLUSTER_MIN_NODE_SIZE node(s)" - echo "Creating cluster $CLUSTER_NAME with a node size of $CLUSTER_MIN_NODE_SIZE. Each node will be configured with a machine type $CLUSTER_MACHINE_TYPE and disk size of $CLUSTER_MACHINE_SIZE" - gcloud -q --project $DEVSHELL_PROJECT_ID container clusters create $CLUSTER_NAME --machine-type $CLUSTER_MACHINE_TYPE --disk-size $CLUSTER_MACHINE_SIZE --num-nodes $CLUSTER_MIN_NODE_SIZE --master-ipv4-cidr $VPC_CONTROL_PANE --network $VPC_NETWORK --zone $ZONE --shielded-secure-boot --shielded-integrity-monitoring --no-enable-master-authorized-networks --enable-private-nodes --enable-ip-alias --scopes "https://www.googleapis.com/auth/cloud-platform" --labels "turbinia-infra=true" --workload-pool=$DEVSHELL_PROJECT_ID.svc.id.goog --default-max-pods-per-node=20 - fi -else - echo "--no-cluster specified. Authenticating to pre-existing cluster $CLUSTER_NAME" -fi - -# Authenticate to cluster -gcloud -q --project $DEVSHELL_PROJECT_ID container clusters get-credentials $CLUSTER_NAME --zone $ZONE -# Create Kubernetes service account -kubectl get serviceaccounts $SA_NAME || kubectl create serviceaccount $SA_NAME --namespace default -gcloud iam service-accounts add-iam-policy-binding $SA_NAME@$DEVSHELL_PROJECT_ID.iam.gserviceaccount.com --role roles/iam.workloadIdentityUser --member "serviceAccount:$DEVSHELL_PROJECT_ID.svc.id.goog[default/$SA_NAME]" -kubectl annotate serviceaccount $SA_NAME --overwrite --namespace default iam.gke.io/gcp-service-account=$SA_NAME@$DEVSHELL_PROJECT_ID.iam.gserviceaccount.com - -# Go to deployment folder to make changes files -cd $DEPLOYMENT_FOLDER - -# Add service account to deployments -sed -i -e "s/serviceAccountName: .*/serviceAccountName: $SA_NAME/g" turbinia-server.yaml turbinia-worker.yaml redis-server.yaml - -# Update Turbinia config with project info -echo "Updating $TURBINIA_CONFIG config with project info" -sed -i -e "s/^INSTANCE_ID = .*$/INSTANCE_ID = '$INSTANCE_ID'/g" $TURBINIA_CONFIG -sed -i -e "s/^TURBINIA_PROJECT = .*$/TURBINIA_PROJECT = '$DEVSHELL_PROJECT_ID'/g" $TURBINIA_CONFIG -sed -i -e "s/^TURBINIA_ZONE = .*$/TURBINIA_ZONE = '$ZONE'/g" $TURBINIA_CONFIG -sed -i -e "s/^TURBINIA_REGION = .*$/TURBINIA_REGION = '$REGION'/g" $TURBINIA_CONFIG -sed -i -e "s/^CLOUD_PROVIDER = .*$/CLOUD_PROVIDER = 'GCP'/g" $TURBINIA_CONFIG - -# Create File Store instance and update deployment files with created instance -if [[ "$*" != *--no-filestore* ]] ; then - echo "Enabling GCP Filestore API" - gcloud -q --project $DEVSHELL_PROJECT_ID services enable file.googleapis.com - echo "Creating Filestore instance $FILESTORE_NAME with capacity $FILESTORE_CAPACITY" - gcloud -q --project $DEVSHELL_PROJECT_ID filestore instances create $FILESTORE_NAME --file-share=name=$FILESTORE_NAME,capacity=$FILESTORE_CAPACITY --zone=$ZONE --network=name=$VPC_NETWORK -else - echo "Using pre existing Filestore instance $FILESTORE_NAME with capacity $FILESTORE_CAPACITY" -fi - -echo "Updating $TURBINIA_CONFIG config with Filestore configuration and setting output directories" -FILESTORE_IP=$(gcloud -q --project $DEVSHELL_PROJECT_ID filestore instances describe $FILESTORE_NAME --zone=$ZONE --format='value(networks.ipAddresses)' --flatten="networks[].ipAddresses[]") -FILESTORE_LOGS="'\/mnt\/$FILESTORE_NAME\/logs'" -FILESTORE_OUTPUT="'\/mnt\/$FILESTORE_NAME\/output'" -sed -i -e "s//$FILESTORE_IP/g" turbinia-volume-filestore.yaml -sed -i -e "s/turbiniavolume/$FILESTORE_NAME/g" turbinia-volume-filestore.yaml turbinia-volume-claim-filestore.yaml turbinia-server.yaml turbinia-worker.yaml redis-server.yaml -sed -i -e "s/storage: .*/storage: $FILESTORE_CAPACITY/g" turbinia-volume-filestore.yaml turbinia-volume-claim-filestore.yaml -sed -i -e "s/^LOG_DIR = .*$/LOG_DIR = $FILESTORE_LOGS/g" $TURBINIA_CONFIG -sed -i -e "s/^MOUNT_DIR_PREFIX = .*$/MOUNT_DIR_PREFIX = '\/mnt\/turbinia'/g" $TURBINIA_CONFIG -sed -i -e "s/^SHARED_FILESYSTEM = .*$/SHARED_FILESYSTEM = True/g" $TURBINIA_CONFIG -sed -i -e "s/^OUTPUT_DIR = .*$/OUTPUT_DIR = $FILESTORE_OUTPUT/g" $TURBINIA_CONFIG - -# Update Turbinia config with Redis/Celery parameters -echo "Updating $TURBINIA_CONFIG with Redis/Celery config" -sed -i -e "s/^TASK_MANAGER = .*$/TASK_MANAGER = 'Celery'/g" $TURBINIA_CONFIG -sed -i -e "s/^STATE_MANAGER = .*$/STATE_MANAGER = 'Redis'/g" $TURBINIA_CONFIG -sed -i -e "s/^REDIS_HOST = .*$/REDIS_HOST = 'redis.default.svc.cluster.local'/g" $TURBINIA_CONFIG -sed -i -e "s/^DEBUG_TASKS = .*$/DEBUG_TASKS = True/g" $TURBINIA_CONFIG - -# Enable Stackdriver Logging and Stackdriver Traceback -echo "Enabling Cloud Error Reporting and Logging APIs" -gcloud -q --project $DEVSHELL_PROJECT_ID services enable clouderrorreporting.googleapis.com -gcloud -q --project $DEVSHELL_PROJECT_ID services enable logging.googleapis.com -echo "Updating $TURBINIA_CONFIG to enable Stackdriver Traceback and Logging" -sed -i -e "s/^STACKDRIVER_LOGGING = .*$/STACKDRIVER_LOGGING = True/g" $TURBINIA_CONFIG -sed -i -e "s/^STACKDRIVER_TRACEBACK = .*$/STACKDRIVER_TRACEBACK = True/g" $TURBINIA_CONFIG - -# Enable Prometheus -echo "Updating $TURBINIA_CONFIG to enable Prometheus application metrics" -sed -i -e "s/^PROMETHEUS_ENABLED = .*$/PROMETHEUS_ENABLED = True/g" $TURBINIA_CONFIG - -# Disable some jobs -echo "Updating $TURBINIA_CONFIG with disabled jobs" -sed -i -e "s/^DISABLED_JOBS = .*$/DISABLED_JOBS = $DISABLED_JOBS/g" $TURBINIA_CONFIG - -# Set appropriate docker image in deployment file if user specified -if [[ ! -z "$TURBINIA_SERVER_IMAGE" && ! -z "$TURBINIA_WORKER_IMAGE" ]] ; then - echo "Updating deployment files with docker image $TURBINIA_SERVER_IMAGE and $TURBINIA_WORKER_IMAGE" - sed -i -e "s/us-docker.pkg.dev\/osdfir-registry\/turbinia\/release\/turbinia-server:latest$/$TURBINIA_SERVER_IMAGE/g" turbinia-server.yaml - sed -i -e "s/us-docker.pkg.dev\/osdfir-registry\/turbinia\/release\/turbinia-worker:latest$/$TURBINIA_WORKER_IMAGE/g" turbinia-worker.yaml -fi - -# Deploy to cluster -echo "Deploying Turbinia to $CLUSTER_NAME cluster" -./setup-celery.sh $TURBINIA_CONFIG - -# Deploy Turbinia Controller -if [[ "$*" == *--deploy-controller* ]] ; then - echo "--deploy-controller specified. Deploying Turbinia controller." - kubectl create -f turbinia-controller.yaml -fi - -# Deploy dfDewey -if [[ "$*" == *--deploy-dfdewey* ]] ; then - echo "Deploying dfDewey datastores to $CLUSTER_NAME cluster" - if [[ -z "$(gcloud -q --project $DEVSHELL_PROJECT_ID filestore instances list --format='value(name)' --filter=name:$FILESTORE_DFDEWEY_NAME)" ]] ; then - echo "Creating Filestore instance $FILESTORE_DFDEWEY_NAME with capacity $FILESTORE_DFDEWEY_CAPACITY" - gcloud -q --project $DEVSHELL_PROJECT_ID filestore instances create $FILESTORE_DFDEWEY_NAME --file-share=name=$FILESTORE_DFDEWEY_NAME,capacity=$FILESTORE_DFDEWEY_CAPACITY --zone=$ZONE --network=name=$VPC_NETWORK - else - echo "Using pre existing Filestore instance $FILESTORE_DFDEWEY_NAME with capacity $FILESTORE_DFDEWEY_CAPACITY" - fi - FILESTORE_DFDEWEY_IP=$(gcloud -q --project $DEVSHELL_PROJECT_ID filestore instances describe $FILESTORE_DFDEWEY_NAME --zone=$ZONE --format='value(networks.ipAddresses)' --flatten="networks[].ipAddresses[]") - sed -i -e "s//$FILESTORE_DFDEWEY_NAME/g" dfdewey-volume-filestore.yaml - sed -i -e "s//$FILESTORE_DFDEWEY_IP/g" dfdewey-volume-filestore.yaml - sed -i -e "s//$FILESTORE_DFDEWEY_CAPACITY/g" dfdewey-volume-filestore.yaml dfdewey-volume-claim-filestore.yaml - sed -i -e "s//$FILESTORE_PG_PATH/g" postgres-server.yaml - sed -i -e "s//$FILESTORE_OS_PATH/g" opensearch-server.yaml - - ./setup-dfdewey.sh $TURBINIA_CONFIG -fi - -# Create backup of turbinia config file if it exists -TURBINIA_OUT="$HOME/.turbiniarc" -if [[ -a $TURBINIA_OUT ]] ; then - backup_file="${TURBINIA_OUT}.$( date +%s )" - mv $TURBINIA_OUT $backup_file - echo "Backing up old Turbinia config $TURBINIA_CONFIG to $backup_file" -fi - -# Make a copy of Turbinia config in user home directory -echo "Creating a copy of Turbinia config in $TURBINIA_OUT" -cp $TURBINIA_CONFIG $TURBINIA_OUT - -echo "Turbinia GKE was succesfully deployed!" -echo "Authenticate via: gcloud container clusters get-credentials $CLUSTER_NAME --zone $ZONE" \ No newline at end of file diff --git a/k8s/tools/deploy-pubsub-gke.sh b/k8s/tools/deploy-pubsub-gke.sh deleted file mode 100755 index 875d4bcb6..000000000 --- a/k8s/tools/deploy-pubsub-gke.sh +++ /dev/null @@ -1,336 +0,0 @@ -#!/bin/bash -# Turbinia GKE deployment script -# This script can be used to deploy the Turbinia stack to GKE PubSub. -# Requirements: -# - have 'gcloud' and 'kubectl' installed. -# - authenticate against your GCP project with "gcloud auth login" -# - optionally have the GCP project set with "gcloud config set project [you-project-name]" -# -# Use --help to show you commands supported. - -set -o posix -set -e - -# Source cluster config to pull specs to create cluster from. Please review -# the config file and make any necessary changes prior to executing this script -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -source $DIR/.clusterconfig -cd $DIR/.. - -if [[ "$*" == *--help ]] ; then - echo "Turbinia deployment script for Kubernetes environment" - echo "Options:" - echo "--build-dev Deploy Turbinia development docker image" - echo "--build-experimental Deploy Turbinia experimental docker image" - echo "--no-cloudfunctions Do not deploy Turbinia Cloud Functions" - echo "--no-appengine Do not enable App Engine" - echo "--no-datastore Do not configure Turbinia Datastore" - echo "--no-filestore Do not deploy Turbinia Filestore" - echo "--no-node-autoscale Do not enable Node autoscaling" - echo "--no-gcs Do not create a GCS bucket" - echo "--no-pubsub Do not create the PubSub and PSQ topic/subscription" - echo "--no-cluster Do not create the cluster" - echo "--deploy-controller Deploy Turbinia controller for load testing and troubleshooting" - echo "--deploy-dfdewey Deploy dfDewey datastores" - exit 1 -fi - -# Check if gcloud is installed -if [[ -z "$( which gcloud )" ]] ; then - echo "gcloud CLI not found. Please follow the instructions at " - echo "https://cloud.google.com/sdk/docs/install to install the gcloud " - echo "package first." - exit 1 -fi - -# Check if kubectl is installed -if [[ -z "$( which kubectl )" ]] ; then - echo "kubectl CLI not found. Please follow the instructions at " - echo "https://kubernetes.io/docs/tasks/tools/ to install the kubectl " - echo "package first." - exit 1 -fi - -# Check configured gcloud project -if [[ -z "$DEVSHELL_PROJECT_ID" ]] ; then - DEVSHELL_PROJECT_ID=$(gcloud config get-value project) - ERRMSG="ERROR: Could not get configured project. Please either restart " - ERRMSG+="Google Cloudshell, or set configured project with " - ERRMSG+="'gcloud config set project PROJECT' when running outside of Cloudshell." - if [[ -z "$DEVSHELL_PROJECT_ID" ]] ; then - echo $ERRMSG - exit 1 - fi - echo "Environment variable \$DEVSHELL_PROJECT_ID was not set at start time " - echo "so attempting to get project config from gcloud config." - echo -n "Do you want to use $DEVSHELL_PROJECT_ID as the target project? (y / n) > " - read response - if [[ $response != "y" && $response != "Y" ]] ; then - echo $ERRMSG - exit 1 - fi -fi - -# TODO: Do real check to make sure credentials have adequate roles -if [[ $( gcloud -q --project $DEVSHELL_PROJECT_ID auth list --filter="status:ACTIVE" --format="value(account)" | wc -l ) -eq 0 ]] ; then - echo "No gcloud credentials found. Use 'gcloud auth login' and 'gcloud auth application-default login' to log in" - exit 1 -fi - -# Enable IAM services -gcloud -q --project $DEVSHELL_PROJECT_ID services enable iam.googleapis.com - - -# Create Turbinia service account with necessary IAM roles. The service account will be used at -# container runtime in order to have the necessary permissions to attach and detach GCP disks, to -# access GCP Pubsub, Datastore, Cloud Functions, GCS, and to write logs to stackdriver logging and -# error reporting. -SA_NAME="turbinia" -SA_MEMBER="serviceAccount:$SA_NAME@$DEVSHELL_PROJECT_ID.iam.gserviceaccount.com" -if [[ -z "$(gcloud -q --project $DEVSHELL_PROJECT_ID iam service-accounts list --format='value(name)' --filter=name:/$SA_NAME@)" ]] ; then - gcloud --project $DEVSHELL_PROJECT_ID iam service-accounts create "${SA_NAME}" --display-name "${SA_NAME}" - # Grant IAM roles to the service account - echo "Grant permissions on service account" - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/cloudfunctions.admin' - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/editor' - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/cloudsql.admin' - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/datastore.indexAdmin' - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/logging.logWriter' - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/errorreporting.writer' - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/pubsub.admin' - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/servicemanagement.admin' - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/storage.admin' - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/compute.admin' -fi - -echo "Enabling Compute API" -gcloud -q --project $DEVSHELL_PROJECT_ID services enable compute.googleapis.com - -# Check if the configured VPC network exists. -networks=$(gcloud -q --project $DEVSHELL_PROJECT_ID compute networks list --filter="name=$VPC_NETWORK" |wc -l) -if [[ "${networks}" -lt "2" ]]; then - echo "ERROR: VPC network $VPC_NETWORK not found, please create this first." - exit 1 -fi - -# Update Docker image if flag was provided else use default -if [[ "$*" == *--build-dev* ]] ; then - TURBINIA_SERVER_IMAGE="us-docker.pkg.dev\/osdfir-registry\/turbinia\/release\/turbinia-server-dev:latest" - TURBINIA_WORKER_IMAGE="us-docker.pkg.dev\/osdfir-registry\/turbinia\/release\/turbinia-worker-dev:latest" -elif [[ "$*" == *--build-experimental* ]] ; then - TURBINIA_SERVER_IMAGE="us-docker.pkg.dev\/osdfir-registry\/turbinia\/release\/turbinia-server-experimental:latest" - TURBINIA_WORKER_IMAGE="us-docker.pkg.dev\/osdfir-registry\/turbinia\/release\/turbinia-worker-experimental:latest" -fi - -echo "Setting docker image to $TURBINIA_SERVER_IMAGE and $TURBINIA_WORKER_IMAGE" -echo "Deploying cluster to project $DEVSHELL_PROJECT_ID" - -# Setup appropriate directories and copy of deployment templates and Turbinia config -echo "Copying over template deployment files to $DEPLOYMENT_FOLDER" -mkdir -p $DEPLOYMENT_FOLDER -cp common/* $DEPLOYMENT_FOLDER -cp gcp-pubsub/* $DEPLOYMENT_FOLDER -if [[ "$*" == *--deploy-dfdewey* ]] ; then - cp dfdewey/* $DEPLOYMENT_FOLDER -fi -cp ../turbinia/config/turbinia_config_tmpl.py $DEPLOYMENT_FOLDER/$TURBINIA_CONFIG - -# Deploy cloud functions -if [[ "$*" != *--no-cloudfunctions* ]] ; then - echo "Deploying cloud functions" - gcloud -q --project $DEVSHELL_PROJECT_ID services enable cloudfunctions.googleapis.com - gcloud -q --project $DEVSHELL_PROJECT_ID services enable cloudbuild.googleapis.com - - # Deploying cloud functions is flaky. Retry until success. - while true; do - num_functions="$(gcloud -q --project $DEVSHELL_PROJECT_ID functions list | grep task | grep $REGION | wc -l)" - if [[ "${num_functions}" -eq "3" ]]; then - echo "All Cloud Functions deployed" - break - fi - gcloud -q --project $DEVSHELL_PROJECT_ID functions deploy gettasks --region $REGION --source ../tools/gcf_init/ --runtime nodejs14 --trigger-http --memory 256MB --timeout 60s - gcloud -q --project $DEVSHELL_PROJECT_ID functions deploy closetask --region $REGION --source ../tools/gcf_init/ --runtime nodejs14 --trigger-http --memory 256MB --timeout 60s - gcloud -q --project $DEVSHELL_PROJECT_ID functions deploy closetasks --region $REGION --source ../tools/gcf_init/ --runtime nodejs14 --trigger-http --memory 256MB --timeout 60s - done -fi - -# Deploy Datastore indexes -if [[ "$*" != *--no-datastore* ]] ; then - echo "Enabling Datastore API and deploying datastore index" - gcloud -q --project $DEVSHELL_PROJECT_ID services enable datastore.googleapis.com - # Enable App Engine - if [[ "$*" != *--no-appengine* ]] ; then - echo "Enabling App Engine" - gcloud -q --project $DEVSHELL_PROJECT_ID app create --region=$DATASTORE_REGION - fi - gcloud -q --project $DEVSHELL_PROJECT_ID datastore databases create --region=$DATASTORE_REGION - gcloud -q --project $DEVSHELL_PROJECT_ID datastore indexes create ../tools/gcf_init/index.yaml -fi - -# Create GKE cluster and authenticate to it -if [[ "$*" != *--no-cluster* ]] ; then - echo "Enabling Container API" - gcloud -q --project $DEVSHELL_PROJECT_ID services enable container.googleapis.com - if [[ "$*" != *--no-node-autoscale* ]] ; then - echo "Creating cluster $CLUSTER_NAME with a minimum node size of $CLUSTER_MIN_NODE_SIZE to scale up to a maximum node size of $CLUSTER_MAX_NODE_SIZE. Each node will be configured with a machine type $CLUSTER_MACHINE_TYPE and disk size of $CLUSTER_MACHINE_SIZE" - gcloud -q --project $DEVSHELL_PROJECT_ID container clusters create $CLUSTER_NAME --machine-type $CLUSTER_MACHINE_TYPE --disk-size $CLUSTER_MACHINE_SIZE --num-nodes $CLUSTER_MIN_NODE_SIZE --master-ipv4-cidr $VPC_CONTROL_PANE --network $VPC_NETWORK --zone $ZONE --shielded-secure-boot --shielded-integrity-monitoring --no-enable-master-authorized-networks --enable-private-nodes --enable-ip-alias --scopes "https://www.googleapis.com/auth/cloud-platform" --labels "turbinia-infra=true" --workload-pool=$DEVSHELL_PROJECT_ID.svc.id.goog --default-max-pods-per-node=20 --enable-autoscaling --min-nodes=$CLUSTER_MIN_NODE_SIZE --max-nodes=$CLUSTER_MAX_NODE_SIZE - else - echo "--no-node-autoscale specified. Node size will remain constant at $CLUSTER_MIN_NODE_SIZE node(s)" - echo "Creating cluster $CLUSTER_NAME with a node size of $CLUSTER_MIN_NODE_SIZE. Each node will be configured with a machine type $CLUSTER_MACHINE_TYPE and disk size of $CLUSTER_MACHINE_SIZE" - gcloud -q --project $DEVSHELL_PROJECT_ID container clusters create $CLUSTER_NAME --machine-type $CLUSTER_MACHINE_TYPE --disk-size $CLUSTER_MACHINE_SIZE --num-nodes $CLUSTER_MIN_NODE_SIZE --master-ipv4-cidr $VPC_CONTROL_PANE --network $VPC_NETWORK --zone $ZONE --shielded-secure-boot --shielded-integrity-monitoring --no-enable-master-authorized-networks --enable-private-nodes --enable-ip-alias --scopes "https://www.googleapis.com/auth/cloud-platform" --labels "turbinia-infra=true" --workload-pool=$DEVSHELL_PROJECT_ID.svc.id.goog --default-max-pods-per-node=20 - fi -else - echo "--no-cluster specified. Authenticating to pre-existing cluster $CLUSTER_NAME" -fi - -# Authenticate to cluster -gcloud -q --project $DEVSHELL_PROJECT_ID container clusters get-credentials $CLUSTER_NAME --zone $ZONE -# Create Kubernetes service account -kubectl get serviceaccounts $SA_NAME || kubectl create serviceaccount $SA_NAME --namespace default -gcloud iam service-accounts add-iam-policy-binding $SA_NAME@$DEVSHELL_PROJECT_ID.iam.gserviceaccount.com --role roles/iam.workloadIdentityUser --member "serviceAccount:$DEVSHELL_PROJECT_ID.svc.id.goog[default/$SA_NAME]" -kubectl annotate serviceaccount $SA_NAME --overwrite --namespace default iam.gke.io/gcp-service-account=$SA_NAME@$DEVSHELL_PROJECT_ID.iam.gserviceaccount.com - -# Go to deployment folder to make changes files -cd $DEPLOYMENT_FOLDER - -# Add service account to deployments -sed -i -e "s//$SA_NAME/g" turbinia-server.yaml turbinia-worker.yaml - -# Disable some jobs -echo "Updating $TURBINIA_CONFIG with disabled jobs" -sed -i -e "s/^DISABLED_JOBS = .*$/DISABLED_JOBS = $DISABLED_JOBS/g" $TURBINIA_CONFIG - -# Update Turbinia config with project info -echo "Updating $TURBINIA_CONFIG config with project info" -sed -i -e "s/^INSTANCE_ID = .*$/INSTANCE_ID = '$INSTANCE_ID'/g" $TURBINIA_CONFIG -sed -i -e "s/^TURBINIA_PROJECT = .*$/TURBINIA_PROJECT = '$DEVSHELL_PROJECT_ID'/g" $TURBINIA_CONFIG -sed -i -e "s/^TURBINIA_ZONE = .*$/TURBINIA_ZONE = '$ZONE'/g" $TURBINIA_CONFIG -sed -i -e "s/^TURBINIA_REGION = .*$/TURBINIA_REGION = '$REGION'/g" $TURBINIA_CONFIG -sed -i -e "s/^CLOUD_PROVIDER = .*$/CLOUD_PROVIDER = 'GCP'/g" $TURBINIA_CONFIG - -# Create File Store instance and update deployment files with created instance -if [[ "$*" != *--no-filestore* ]] ; then - echo "Enabling GCP Filestore API" - gcloud -q --project $DEVSHELL_PROJECT_ID services enable file.googleapis.com - echo "Creating Filestore instance $FILESTORE_NAME with capacity $FILESTORE_CAPACITY" - gcloud -q --project $DEVSHELL_PROJECT_ID filestore instances create $FILESTORE_NAME --file-share=name=$FILESTORE_NAME,capacity=$FILESTORE_CAPACITY --zone=$ZONE --network=name=$VPC_NETWORK -else - echo "Using pre existing Filestore instance $FILESTORE_NAME with capacity $FILESTORE_CAPACITY" -fi - -echo "Updating $TURBINIA_CONFIG config with Filestore configuration" -FILESTORE_IP=$(gcloud -q --project $DEVSHELL_PROJECT_ID filestore instances describe $FILESTORE_NAME --zone=$ZONE --format='value(networks.ipAddresses)' --flatten="networks[].ipAddresses[]") -FILESTORE_LOGS="'\/mnt\/$FILESTORE_NAME\/logs'" -FILESTORE_OUTPUT="'\/mnt\/$FILESTORE_NAME\/output'" -sed -i -e "s//$FILESTORE_IP/g" turbinia-volume-filestore.yaml -sed -i -e "s/turbiniavolume/$FILESTORE_NAME/g" turbinia-volume-filestore.yaml turbinia-volume-claim-filestore.yaml turbinia-server.yaml turbinia-worker.yaml -sed -i -e "s/storage: .*/storage: $FILESTORE_CAPACITY/g" turbinia-volume-filestore.yaml turbinia-volume-claim-filestore.yaml -sed -i -e "s/^LOG_DIR = .*$/LOG_DIR = $FILESTORE_LOGS/g" $TURBINIA_CONFIG -sed -i -e "s/^MOUNT_DIR_PREFIX = .*$/MOUNT_DIR_PREFIX = '\/mnt\/turbinia'/g" $TURBINIA_CONFIG -sed -i -e "s/^SHARED_FILESYSTEM = .*$/SHARED_FILESYSTEM = True/g" $TURBINIA_CONFIG -sed -i -e "s/^OUTPUT_DIR = .*$/OUTPUT_DIR = $FILESTORE_OUTPUT/g" $TURBINIA_CONFIG - -#Create Google Cloud Storage Bucket -if [[ "$*" != *--no-gcs* ]] ; then - echo "Enabling GCS cloud storage" - gcloud -q --project $DEVSHELL_PROJECT_ID services enable storage-component.googleapis.com - echo "Creating GCS bucket gs://$INSTANCE_ID" - gsutil mb -l $REGION gs://$INSTANCE_ID -else - echo "--no-gcs specified. Using pre-existing GCS bucket $INSTANCE_ID" -fi - -echo "Updating $TURBINIA_CONFIG config with GCS bucket configuration" -sed -i -e "s/^GCS_OUTPUT_PATH = .*$/GCS_OUTPUT_PATH = 'gs:\/\/$INSTANCE_ID\/output'/g" $TURBINIA_CONFIG -sed -i -e "s/^BUCKET_NAME = .*$/BUCKET_NAME = '$INSTANCE_ID'/g" $TURBINIA_CONFIG - -# Create main PubSub Topic/Subscription -if [[ "$*" != *--no-pubsub* ]] ; then - echo "Enabling the GCP PubSub API" - gcloud -q --project $DEVSHELL_PROJECT_ID services enable pubsub.googleapis.com - echo "Creating PubSub topic $INSTANCE_ID" - gcloud -q --project $DEVSHELL_PROJECT_ID pubsub topics create $INSTANCE_ID - echo "Creating PubSub subscription $INSTANCE_ID" - gcloud -q --project $DEVSHELL_PROJECT_ID pubsub subscriptions create $INSTANCE_ID --topic=$INSTANCE_ID --ack-deadline=600 - - # Create internal PubSub PSQ Topic/Subscription - echo "Creating PubSub PSQ Topic $INSTANCE_ID-psq" - gcloud -q --project $DEVSHELL_PROJECT_ID pubsub topics create "$INSTANCE_ID-psq" - echo "Creating PubSub PSQ subscription $INSTANCE_ID-psq" - gcloud -q --project $DEVSHELL_PROJECT_ID pubsub subscriptions create "$INSTANCE_ID-psq" --topic="$INSTANCE_ID-psq" --ack-deadline=600 -else - echo "--no-pubsub specified. Using pre-existing PubSub topic/subscription $INSTANCE_ID and PSQ topic/subscription $INSTANCE_ID-psq" -fi - -# Update Turbinia config with PubSub parameters -echo "Updating $TURBINIA_CONFIG with PubSub config" -sed -i -e "s/^TASK_MANAGER = .*$/TASK_MANAGER = 'PSQ'/g" $TURBINIA_CONFIG -sed -i -e "s/^PUBSUB_TOPIC = .*$/PUBSUB_TOPIC = '$INSTANCE_ID'/g" $TURBINIA_CONFIG -sed -i -e "s/^PSQ_TOPIC = .*$/PSQ_TOPIC = '$INSTANCE_ID-psq'/g" $TURBINIA_CONFIG - -# Enable Stackdriver Logging and Stackdriver Traceback -echo "Enabling Cloud Error Reporting and Logging APIs" -gcloud -q --project $DEVSHELL_PROJECT_ID services enable clouderrorreporting.googleapis.com -gcloud -q --project $DEVSHELL_PROJECT_ID services enable logging.googleapis.com -echo "Updating $TURBINIA_CONFIG to enable Stackdriver Traceback and Logging" -sed -i -e "s/^STACKDRIVER_LOGGING = .*$/STACKDRIVER_LOGGING = True/g" $TURBINIA_CONFIG -sed -i -e "s/^STACKDRIVER_TRACEBACK = .*$/STACKDRIVER_TRACEBACK = True/g" $TURBINIA_CONFIG - -# Enable Prometheus -echo "Updating $TURBINIA_CONFIG to enable Prometheus application metrics" -sed -i -e "s/^PROMETHEUS_ENABLED = .*$/PROMETHEUS_ENABLED = True/g" $TURBINIA_CONFIG - -# Disable some jobs -echo "Updating $TURBINIA_CONFIG with disabled jobs" -sed -i -e "s/^DISABLED_JOBS = .*$/DISABLED_JOBS = $DISABLED_JOBS/g" $TURBINIA_CONFIG - -# Set appropriate docker image in deployment file if user specified -if [[ ! -z "$TURBINIA_SERVER_IMAGE" && ! -z "$TURBINIA_WORKER_IMAGE" ]] ; then - echo "Updating deployment files with docker image $TURBINIA_SERVER_IMAGE and $TURBINIA_WORKER_IMAGE" - sed -i -e "s/us-docker.pkg.dev\/osdfir-registry\/turbinia\/release\/turbinia-server:latest$/$TURBINIA_SERVER_IMAGE/g" turbinia-server.yaml - sed -i -e "s/us-docker.pkg.dev\/osdfir-registry\/turbinia\/release\/turbinia-worker:latest$/$TURBINIA_WORKER_IMAGE/g" turbinia-worker.yaml -fi - -# Deploy to cluster -echo "Deploying Turbinia to $CLUSTER_NAME cluster" -./setup-pubsub.sh $TURBINIA_CONFIG - -# Deploy Turbinia Controller -if [[ "$*" == *--deploy-controller* ]] ; then - echo "--deploy-controller specified. Deploying Turbinia controller." - kubectl create -f turbinia-controller.yaml -fi - -# Deploy dfDewey -if [[ "$*" == *--deploy-dfdewey* ]] ; then - echo "Deploying dfDewey datastores to $CLUSTER_NAME cluster" - if [[ -z "$(gcloud -q --project $DEVSHELL_PROJECT_ID filestore instances list --format='value(name)' --filter=name:$FILESTORE_DFDEWEY_NAME)" ]] ; then - echo "Creating Filestore instance $FILESTORE_DFDEWEY_NAME with capacity $FILESTORE_DFDEWEY_CAPACITY" - gcloud -q --project $DEVSHELL_PROJECT_ID filestore instances create $FILESTORE_DFDEWEY_NAME --file-share=name=$FILESTORE_DFDEWEY_NAME,capacity=$FILESTORE_DFDEWEY_CAPACITY --zone=$ZONE --network=name=$VPC_NETWORK - else - echo "Using pre existing Filestore instance $FILESTORE_DFDEWEY_NAME with capacity $FILESTORE_DFDEWEY_CAPACITY" - fi - FILESTORE_DFDEWEY_IP=$(gcloud -q --project $DEVSHELL_PROJECT_ID filestore instances describe $FILESTORE_DFDEWEY_NAME --zone=$ZONE --format='value(networks.ipAddresses)' --flatten="networks[].ipAddresses[]") - sed -i -e "s//$FILESTORE_DFDEWEY_NAME/g" dfdewey-volume-filestore.yaml - sed -i -e "s//$FILESTORE_DFDEWEY_IP/g" dfdewey-volume-filestore.yaml - sed -i -e "s//$FILESTORE_DFDEWEY_CAPACITY/g" dfdewey-volume-filestore.yaml dfdewey-volume-claim-filestore.yaml - sed -i -e "s//$FILESTORE_PG_PATH/g" postgres-server.yaml - sed -i -e "s//$FILESTORE_OS_PATH/g" opensearch-server.yaml - - ./setup-dfdewey.sh $TURBINIA_CONFIG -fi - -# Create backup of turbinia config file if it exists -TURBINIA_OUT="$HOME/.turbiniarc" -if [[ -a $TURBINIA_OUT ]] ; then - backup_file="${TURBINIA_OUT}.$( date +%s )" - mv $TURBINIA_OUT $backup_file - echo "Backing up old Turbinia config $TURBINIA_CONFIG to $backup_file" -fi - -# Make a copy of Turbinia config in user home directory -echo "Creating a copy of Turbinia config in $TURBINIA_OUT" -cp $TURBINIA_CONFIG $TURBINIA_OUT - -echo "Turbinia GKE was succesfully deployed!" -echo "Authenticate via: gcloud container clusters get-credentials $CLUSTER_NAME --zone $ZONE" \ No newline at end of file diff --git a/k8s/tools/destroy-celery-gke.sh b/k8s/tools/destroy-celery-gke.sh deleted file mode 100755 index 082e5cd11..000000000 --- a/k8s/tools/destroy-celery-gke.sh +++ /dev/null @@ -1,110 +0,0 @@ -#!/bin/bash -# Turbinia GKE cleanup script for Celery configuration. -# This script can be used to cleanup the Turbinia Celery stack within GKE. Note that -# this script will not disable any APIs to avoid outage with any other applications -# deployed within the project. -# Requirements: -# - have 'gcloud'installed. -# - authenticate against your GCP project with "gcloud auth login" -# - account being used to run script should have an IAM policy of instance.admin and container.admin used to delete resources. -# - optionally have the GCP project set with "gcloud config set project [you-project-name]" -# -# Use --help to show you commands supported. - -set -o posix -set -e - -# Source cluster config to pull specs to create cluster from. Please review -# the config file and ensure the parameters are set to the cluster you are -# intending to cleanup -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -source $DIR/.clusterconfig -cd $DIR/.. - -if [[ "$*" == *--help || "$*" == *-h ]] ; then - echo "Turbinia cleanup script for Turbinia within Kubernetes" - echo "Options:" - echo "--no-service-account Do not delete the Turbinia service account" - echo "--no-filestore Do not cleanup Turbinia Filestore share" - echo "--no-dfdewey Do not cleanup dfDewey Filestore share" - echo "--no-cluster Do not delete the cluster" - exit 1 -fi - -# Before proceeding, prompt user to confirm deletion -echo "This script is going to do a lot of destructive/irrecoverable actions such as deleting all output, logs, and GCP resources. " -echo -n "Please enter in 'delete all' if you'd like to proceed: " -read response -if [[ $response != "delete all" ]] ; then - echo "'delete all' not specified. Exiting." - exit 1 -fi - -# Check configured gcloud project -if [[ -z "$DEVSHELL_PROJECT_ID" ]] ; then - DEVSHELL_PROJECT_ID=$(gcloud config get-value project) - ERRMSG="ERROR: Could not get configured project. Please either restart " - ERRMSG+="Google Cloudshell, or set configured project with " - ERRMSG+="'gcloud config set project PROJECT' when running outside of Cloudshell." - if [[ -z "$DEVSHELL_PROJECT_ID" ]] ; then - echo $ERRMSG - exit 1 - fi - echo "Environment variable \$DEVSHELL_PROJECT_ID was not set at start time " - echo "so attempting to get project config from gcloud config." - echo -n "Do you want to use $DEVSHELL_PROJECT_ID as the target project? (y / n) > " - read response - if [[ $response != "y" && $response != "Y" ]] ; then - echo $ERRMSG - exit 1 - fi -fi - -# Use either service account or local `gcloud auth` credentials. -if [[ "$*" == *--no-gcloud-auth* ]] ; then - export GOOGLE_APPLICATION_CREDENTIALS=~/$INSTANCE_ID.json -# TODO: Do real check to make sure credentials have adequate roles -elif [[ $( gcloud -q --project $DEVSHELL_PROJECT_ID auth list --filter="status:ACTIVE" --format="value(account)" | wc -l ) -eq 0 ]] ; then - echo "No gcloud credentials found. Use 'gcloud auth login' and 'gcloud auth application-default login' to log in" - exit 1 -fi - -# Delete the cluster -if [[ "$*" != *--no-cluster* ]] ; then - echo "Deleting cluster $CLUSTER_NAME" - gcloud -q --project $DEVSHELL_PROJECT_ID container clusters delete $CLUSTER_NAME --zone $ZONE -fi - -# Delete the Filestore instance -if [[ "$*" != *--no-filestore* ]] ; then - echo "Deleting Filestore instance $FILESTORE_NAME" - gcloud -q --project $DEVSHELL_PROJECT_ID filestore instances delete $FILESTORE_NAME --zone $ZONE -fi -# Delete the dfDewey Filestore instance -if [[ "$*" != *--no-dfdewey* ]] ; then - if [[ -z "$(gcloud -q --project $DEVSHELL_PROJECT_ID filestore instances list --format='value(name)' --filter=name:$FILESTORE_DFDEWEY_NAME)" ]] ; then - echo "Filestore instance $FILESTORE_DFDEWEY_NAME does not exist" - else - echo "Deleting Filestore instance $FILESTORE_DFDEWEY_NAME" - gcloud -q --project $DEVSHELL_PROJECT_ID filestore instances delete $FILESTORE_DFDEWEY_NAME --zone $ZONE - fi -fi - -# Remove the service account if it was being used. -if [[ "$*" != *--no-service-account* ]] ; then - SA_NAME="turbinia" - SA_MEMBER="serviceAccount:$SA_NAME@$DEVSHELL_PROJECT_ID.iam.gserviceaccount.com" - - # Delete IAM roles from the service account - echo "Delete permissions on service account" - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/compute.instanceAdmin' - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/logging.logWriter' - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/errorreporting.writer' - gcloud projects add-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/iam.serviceAccountUser' - - # Delete service account - echo "Delete service account" - gcloud -q --project $DEVSHELL_PROJECT_ID iam service-accounts delete "${SA_NAME}@$DEVSHELL_PROJECT_ID.iam.gserviceaccount.com" -fi - -echo "The Turbinia deployment $INSTANCE_ID was succesfully removed from $DEVSHELL_PROJECT_ID" \ No newline at end of file diff --git a/k8s/tools/destroy-pubsub-gke.sh b/k8s/tools/destroy-pubsub-gke.sh deleted file mode 100755 index 361e2534a..000000000 --- a/k8s/tools/destroy-pubsub-gke.sh +++ /dev/null @@ -1,161 +0,0 @@ -#!/bin/bash -# Turbinia GKE cleanup script -# This script can be used to cleanup the Turbinia stack within GKE PubSub. Note that -# this script will not disable any APIs to avoid outage with any other applications -# deployed within the project. -# Requirements: -# - have 'gcloud'installed. -# - authenticate against your GCP project with "gcloud auth login" -# - optionally have the GCP project set with "gcloud config set project [you-project-name]" -# -# Use --help to show you commands supported. - -set -o posix -set -e - -# Source cluster config to pull specs to create cluster from. Please review -# the config file and ensure the parameters are set to the cluster you are -# intending to cleanup -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -source $DIR/.clusterconfig -cd $DIR/.. - -if [[ "$*" == *--help ]] ; then - echo "Turbinia cleanup script for Turbinia within Kubernetes" - echo "Options:" - echo "--no-service-account Do not delete the Turbinia service account" - echo "--no-cloudfunctions Do not cleanup Turbinia Cloud Functions" - echo "--no-datastore Do not cleanup Turbinia Datastore" - echo "--no-filestore Do not cleanup Turbinia Filestore share" - echo "--no-dfdewey Do not cleanup dfDewey Filestore share" - echo "--no-gcs Do not delete the GCS bucket" - echo "--no-pubsub Do not delete the PubSub and PSQ topic/subscription" - echo "--no-cluster Do not delete the cluster" - exit 1 -fi - -# Before proceeding, prompt user to confirm deletion -echo "This script is going to do a lot of destructive/irrecoverable actions such as deleting all output, logs, and GCP resources. " -echo -n "Please enter in 'delete all' if you'd like to proceed: " -read response -if [[ $response != "delete all" ]] ; then - echo "'delete all' not specified. Exiting." - exit 1 -fi - -# Check configured gcloud project -if [[ -z "$DEVSHELL_PROJECT_ID" ]] ; then - DEVSHELL_PROJECT_ID=$(gcloud config get-value project) - ERRMSG="ERROR: Could not get configured project. Please either restart " - ERRMSG+="Google Cloudshell, or set configured project with " - ERRMSG+="'gcloud config set project PROJECT' when running outside of Cloudshell." - if [[ -z "$DEVSHELL_PROJECT_ID" ]] ; then - echo $ERRMSG - exit 1 - fi - echo "Environment variable \$DEVSHELL_PROJECT_ID was not set at start time " - echo "so attempting to get project config from gcloud config." - echo -n "Do you want to use $DEVSHELL_PROJECT_ID as the target project? (y / n) > " - read response - if [[ $response != "y" && $response != "Y" ]] ; then - echo $ERRMSG - exit 1 - fi -fi - -# Use either service account or local `gcloud auth` credentials. -if [[ "$*" == *--no-gcloud-auth* ]] ; then - export GOOGLE_APPLICATION_CREDENTIALS=~/$INSTANCE_ID.json -# TODO: Do real check to make sure credentials have adequate roles -elif [[ $( gcloud -q --project $DEVSHELL_PROJECT_ID auth list --filter="status:ACTIVE" --format="value(account)" | wc -l ) -eq 0 ]] ; then - echo "No gcloud credentials found. Use 'gcloud auth login' and 'gcloud auth application-default login' to log in" - exit 1 -fi - -# Delete the cluster -if [[ "$*" != *--no-cluster* ]] ; then - echo "Deleting cluster $CLUSTER_NAME" - gcloud -q --project $DEVSHELL_PROJECT_ID container clusters delete $CLUSTER_NAME --zone $ZONE -fi - -# Delete the GCS storage bucket -if [[ "$*" != *--no-gcs* ]] ; then - echo "Deleting GCS storage bucket gs://$INSTANCE_ID" - gsutil -q rm -r gs://$INSTANCE_ID -fi - -# Delete PubSub topics -if [[ "$*" != *--no-pubsub* ]] ; then - echo "Deleting PubSub topic $INSTANCE_ID" - gcloud -q --project $DEVSHELL_PROJECT_ID pubsub topics delete $INSTANCE_ID - gcloud -q --project $DEVSHELL_PROJECT_ID pubsub topics delete "$INSTANCE_ID-psq" - - # Delete PubSub subscriptions - gcloud -q --project $DEVSHELL_PROJECT_ID pubsub subscriptions delete $INSTANCE_ID - gcloud -q --project $DEVSHELL_PROJECT_ID pubsub subscriptions delete "$INSTANCE_ID-psq" -fi - -# Delete the Filestore instance -if [[ "$*" != *--no-filestore* ]] ; then - echo "Deleting Filestore instance $FILESTORE_NAME" - gcloud -q --project $DEVSHELL_PROJECT_ID filestore instances delete $FILESTORE_NAME --zone $ZONE -fi -# Delete the dfDewey Filestore instance -if [[ "$*" != *--no-dfdewey* ]] ; then - if [[ -z "$(gcloud -q --project $DEVSHELL_PROJECT_ID filestore instances list --format='value(name)' --filter=name:$FILESTORE_DFDEWEY_NAME)" ]] ; then - echo "Filestore instance $FILESTORE_DFDEWEY_NAME does not exist" - else - echo "Deleting Filestore instance $FILESTORE_DFDEWEY_NAME" - gcloud -q --project $DEVSHELL_PROJECT_ID filestore instances delete $FILESTORE_DFDEWEY_NAME --zone $ZONE - fi -fi - -# Remove cloud functions -if [[ "$*" != *--no-cloudfunctions* ]] ; then - echo "Delete Google Cloud functions" - if gcloud functions --project $DEVSHELL_PROJECT_ID list | grep gettasks; then - gcloud -q --project $DEVSHELL_PROJECT_ID functions delete gettasks --region $REGION - fi - if gcloud functions --project $DEVSHELL_PROJECT_ID list | grep closetask; then - gcloud -q --project $DEVSHELL_PROJECT_ID functions delete closetask --region $REGION - fi - if gcloud functions --project $DEVSHELL_PROJECT_ID list | grep closetasks; then - gcloud -q --project $DEVSHELL_PROJECT_ID functions delete closetasks --region $REGION - fi -fi - -# Cleanup Datastore indexes -if [[ "$*" != *--no-datastore* ]] ; then - echo "Cleaning up Datastore indexes" - gcloud -q --project $DEVSHELL_PROJECT_ID datastore indexes cleanup ../tools/gcf_init/index.yaml -fi - -# Remove the service account if it was being used. -if [[ "$*" == *--no-service-account* ]] ; then - SA_NAME="turbinia" - SA_MEMBER="serviceAccount:$SA_NAME@$DEVSHELL_PROJECT_ID.iam.gserviceaccount.com" - - # Delete IAM roles from the service account - echo "Delete permissions on service account" - gcloud projects remove-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/cloudfunctions.admin' - gcloud projects remove-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/editor' - gcloud projects remove-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/cloudsql.admin' - gcloud projects remove-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/datastore.indexAdmin' - gcloud projects remove-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/logging.logWriter' - gcloud projects remove-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/errorreporting.writer' - gcloud projects remove-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/pubsub.admin' - gcloud projects remove-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/servicemanagement.admin' - gcloud projects remove-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/storage.admin' - gcloud projects remove-iam-policy-binding $DEVSHELL_PROJECT_ID --member=$SA_MEMBER --role='roles/compute.admin' - - # Delete service account - echo "Delete service account" - gcloud -q --project $DEVSHELL_PROJECT_ID iam service-accounts delete "${SA_NAME}@$DEVSHELL_PROJECT_ID.iam.gserviceaccount.com" - - # Remove the service account key - echo "Remove service account key" - rm ~/$TURBINIA_INSTANCE.json - -fi - -echo "The Turbinia deployment $INSTANCE_ID was succesfully removed from $DEVSHELL_PROJECT_ID" \ No newline at end of file diff --git a/k8s/tools/update-gke-infra.sh b/k8s/tools/update-gke-infra.sh deleted file mode 100755 index 4b29ef4cd..000000000 --- a/k8s/tools/update-gke-infra.sh +++ /dev/null @@ -1,305 +0,0 @@ -#!/bin/bash -# Turbinia GKE management script -# This script can be used to manage a Turbinia stack deployed to GKE. -# Requirements: -# - have 'gcloud' and 'kubectl' installed. -# - authenticate against your GCP project with "gcloud auth login" -# - authenticate against your GKE cluster with "gcloud container clusters get-credentials [cluster-name]> --zone [zone] --project [project-name]" -# - optionally have the GCP project set with "gcloud config set project [you-project-name]" -# -# Use --help to show you commands supported. - -set -o posix -set -e - -SERVER_URI="us-docker.pkg.dev/osdfir-registry/turbinia/release/turbinia-server" -WORKER_URI="us-docker.pkg.dev/osdfir-registry/turbinia/release/turbinia-worker" -GCLOUD=`command -v gcloud` -KUBECTL=`command -v kubectl` -LOG_MODE=all -LOG_LINES=10 - - -function usage { - echo "Usage: $0" - echo "-c Choose one of the commands below" - echo - echo "Optional arguments:" - echo "-n The cluster name" - echo "-s The desired number of nodes in the cluster" - echo "-t Docker image tag, eg latest or 20210606" - echo "-T When executing logs command, show last N log lines (tail) for each node" - echo "-H When executing logs command, show first N log lines (head) for each node" - echo "-f Path to Turbinia configuration file" - echo "-k Environment variable name" - echo "-v Environment variable value" - echo - echo "Commands supported:" - echo "change-image Change the docker image loaded by a Turbinia deployment with DOCKER_TAG, use -t" - echo "logs Display logs of a Turbinia server or worker. Use -T or -H to show tail/head of logs for all pods" - echo "show-config Write the Turbinia configuration of an instance to STDOUT" - echo "status Show the running status of server and workers" - echo "cordon Cordon a cluster (Cordoning nodes is a Kubernetes mechanism to mark a node as “unschedulable”.)" - echo "uncordon Uncordon a cluster (Cordoning nodes is a Kubernetes mechanism to mark a node as “unschedulable”.)" - echo "update-config Update the Turbinia configuration of a Turbinia deployment from CONFIG_FILE, use -f" - echo "update-env Update an environment variable on a container, use -k and -v" - echo "resize-cluster Resize the number of nodes in the cluster." - echo "update-latest Update the Turbinia worker and server deployments to latest docker image." - echo -} - -function check_gcloud { - if [ -z $GCLOUD ] - then - echo "gcloud not found, please install first" - exit 1 - fi -} - -function check_kubectl { - if [ -z $KUBECTL ] - then - echo "kubectl not found, please install first" - exit 1 - fi -} - -function show_infra { - $KUBECTL get pod -o=custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName -} - -function show_nodes { - $KUBECTL get nodes -} - -function get_nodes { - NODES=$($KUBECTL get nodes --output=jsonpath={.items..metadata.name}) -} - -function get_pods { - PODS=$($KUBECTL get pod --output=jsonpath={.items..metadata.name}) -} - -function cordon { - echo "Note this does not stop a cluster. Please resize the cluster to zero to prevent being billed." - # Show status - show_nodes - - # Cordon all nodes - get_nodes - - for NODE in $NODES - do - $KUBECTL cordon $NODE - done - - # Show status - show_nodes -} - -function uncordon { - # Show status - show_nodes - - # Uncordon all nodes - get_nodes - - for NODE in $NODES - do - $KUBECTL uncordon $NODE - done - - # Show status - show_nodes -} - -function show_container_logs { - show_infra - read -p 'Which container name? ' CONTAINER_NAME - $KUBECTL logs $CONTAINER_NAME -} - -function show_container_logs_all { - get_pods - for POD in $PODS - do - echo "Logs for pod $POD:" - echo "------------------" - $KUBECTL logs $POD | $LOG_MODE -n $LOG_LINES - done -} - -function show_config { - echo "Pulling Turbinia configuration from ConfigMap: turbinia-config" - $KUBECTL get configmap turbinia-config -o json | jq '.data.TURBINIA_CONF' | xargs | base64 -d -} - -function update_config { - CONFIG_BASE64=`cat $CONFIG_FILE | base64 -w 0` - # Update ConfigMap with new Turbinia config - $KUBECTL create configmap turbinia-config --from-literal=TURBINIA_CONF=$CONFIG_BASE64 -o yaml --dry-run=client | $KUBECTL replace -f - - rollout_restart -} - -function show_deployment { - $KUBECTL get deployments -} - -function update_env { - show_deployment - - echo "Going to set environment variable $ENVKEY to $ENVVALUE" - read -p 'Which deployment? ' DEPLOYMENT - - # Update the deployment - $KUBECTL set env deployment/$DEPLOYMENT $ENVKEY=$ENVVALUE - -} - -function rollout_restart { - DEPLOYMENTS=$(kubectl get deployments --output=jsonpath={.items..metadata.name}) - - # rollout each deployment - for DEPLOYMENT in $DEPLOYMENTS - do - $KUBECTL rollout restart deployment/$DEPLOYMENT - done - - # Show status - for DEPLOYMENT in $DEPLOYMENTS - do - $KUBECTL rollout status deployment/$DEPLOYMENT - done -} - -function resize_cluster { - echo "Resizing cluster $CLUSTER_NAME to $CLUSTER_SIZE nodes." - read -p 'WARNING: This will delete nodes as well as any associated data on the node. Do you wish to continue? (yes/no) ' ANS - - if [ "$ANS" == "yes" ] ; then - $GCLOUD container clusters resize $CLUSTER_NAME --num-nodes $CLUSTER_SIZE - else - echo "Please enter yes if you'd like to resize the cluster. Exiting..." - exit 0 - fi -} - -function update_docker_image_tag { - echo "Updating the following deployments with docker tag $DOCKER_TAG" - show_deployment - - # Update the turbinia-server deployment - $KUBECTL set image deployment/turbinia-server server=$SERVER_URI:$DOCKER_TAG - - # Update the turbinia-worker deployment - $KUBECTL set image deployment/turbinia-worker worker=$WORKER_URI:$DOCKER_TAG - - # Restart Turbinia Server/Worker Deployments so changes can apply - rollout_restart -} - -while getopts ":c:H:n:s:t:T:f:v:k:" option; do - case ${option} in - c ) - CMD=$OPTARG;; - H ) - LOG_MODE="head" - LOG_LINES=$OPTARG;; - n ) - CLUSTER_NAME=$OPTARG;; - s ) - CLUSTER_SIZE=$OPTARG;; - t ) - DOCKER_TAG=$OPTARG;; - T ) - LOG_MODE="tail" - LOG_LINES=$OPTARG;; - f ) - CONFIG_FILE=$OPTARG;; - k ) - ENVKEY=$OPTARG;; - v ) - ENVVALUE=$OPTARG;; - \? ) - echo "Error: Invalid usage" - usage - exit 1 - exit;; - esac -done -shift $((OPTIND -1)) - -# check whether user had supplied -h or --help . If yes display usage -if [[ ( $# == "--help") || $# == "-h" ]] -then - usage - exit 0 -fi - -if [ -z ${CMD} ]; then - echo "Error: Please provide a command (-c)" - usage - exit 1 -fi - -# check if the gcloud and kubectl binary is present -check_gcloud -check_kubectl - -echo "Running against GCP project:" -$GCLOUD config list project - - -case $CMD in - status) - show_infra - ;; - logs) - if [ $LOG_MODE == "tail" ] || [ $LOG_MODE == "head" ] ; then - show_container_logs_all - else - show_container_logs - fi - ;; - cordon) - cordon - ;; - uncordon) - uncordon - ;; - show-config) - show_config - ;; - update-config) - if [ -z ${CONFIG_FILE} ]; then - echo "Error: No configuration file provided" - usage - exit 1 - fi - update_config - ;; - update-env) - if [ -z ${ENVKEY} ] || [ -z ${ENVVALUE} ] ; then - echo "Error: No key or value set to update environment variable (use -k and -v)" - usage - exit 1 - fi - update_env - ;; - change-image) - if [ -z ${DOCKER_TAG} ]; then - echo "Error: No Docker image tag provided" - usage - exit 1 - fi - update_docker_image_tag - ;; - resize-cluster) - if [ -z ${CLUSTER_NAME} ] || [ -z ${CLUSTER_SIZE} ] ; then - echo "Error: No cluster name or cluster size provided" - usage - exit 1 - fi - resize_cluster - ;; -esac diff --git a/monitoring/grafana/provisioning/dashboards/turbinia.yaml b/monitoring/grafana/provisioning/dashboards/turbinia.yaml deleted file mode 100644 index 048b438ef..000000000 --- a/monitoring/grafana/provisioning/dashboards/turbinia.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: 1 -providers: - - name: 'Turbinia' - orgId: 1 - folder: '' - folderUid: '' - type: file - disableDeletion: false - updateIntervalSeconds: 10 - allowUiUpdates: true - options: - path: /etc/grafana/dashboards - foldersFromFilesStructure: true \ No newline at end of file diff --git a/monitoring/grafana/provisioning/datasources/prometheus.yaml b/monitoring/grafana/provisioning/datasources/prometheus.yaml deleted file mode 100644 index 453bd4d9b..000000000 --- a/monitoring/grafana/provisioning/datasources/prometheus.yaml +++ /dev/null @@ -1,6 +0,0 @@ -apiVersion: 1 -datasources: - - name: Prometheus - type: prometheus - access: Server - url: http://:9090 \ No newline at end of file diff --git a/monitoring/k8s/gen-yaml.sh b/monitoring/k8s/gen-yaml.sh deleted file mode 100755 index 2d84ce567..000000000 --- a/monitoring/k8s/gen-yaml.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh -# Turbinia Monitoring generation script -# Please use this script to properly configure -# the .yaml files required for Turbinia k8s deployment. - -# Temporarily save results to this file -TMPSED='tmpsed.json' - -# Turbinia app metrics dashboard -sed -e 's/^/ /' ../grafana/dashboards/turbinia-application-metrics.json > $TMPSED -sed -e "/@@JSONDATA@@/{r $TMPSED" -e ' d}' -i grafana/turbinia-application-metrics.yaml - -# Turbinia health check metrics dashboard -sed -e 's/^/ /' ../grafana/dashboards/turbinia-health-check.json > $TMPSED -sed -e "/@@JSONDATA@@/{r $TMPSED" -e ' d}' -i grafana/turbinia-healthcheck-metrics.yaml - -# Prometheus Alerting -sed -e 's/^/ /' ../prometheus/prometheus.rules.yml > $TMPSED -sed -e "/@@JSONDATA@@/{r $TMPSED" -e ' d}' -i prometheus/turbinia-custom-rules.yaml - -# Remove temp file when done -rm $TMPSED \ No newline at end of file diff --git a/monitoring/k8s/grafana/turbinia-application-metrics.yaml b/monitoring/k8s/grafana/turbinia-application-metrics.yaml deleted file mode 100644 index 101607ea5..000000000 --- a/monitoring/k8s/grafana/turbinia-application-metrics.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: v1 -items: -- apiVersion: v1 - data: - turbinia-application-metrics.json: |- - @@JSONDATA@@ - - kind: ConfigMap - metadata: - labels: - app.kubernetes.io/component: grafana - app.kubernetes.io/name: grafana - app.kubernetes.io/part-of: kube-prometheus - app.kubernetes.io/version: 7.5.4 - name: turbinia-application-metrics - namespace: monitoring -kind: ConfigMapList \ No newline at end of file diff --git a/monitoring/k8s/grafana/turbinia-healthcheck-metrics.yaml b/monitoring/k8s/grafana/turbinia-healthcheck-metrics.yaml deleted file mode 100644 index 271bb2ff8..000000000 --- a/monitoring/k8s/grafana/turbinia-healthcheck-metrics.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: v1 -items: -- apiVersion: v1 - data: - turbinia-healthcheck-metrics.json: |- - @@JSONDATA@@ - - kind: ConfigMap - metadata: - labels: - app.kubernetes.io/component: grafana - app.kubernetes.io/name: grafana - app.kubernetes.io/part-of: kube-prometheus - app.kubernetes.io/version: 7.5.4 - name: turbinia-healthcheck-metrics - namespace: monitoring -kind: ConfigMapList \ No newline at end of file diff --git a/monitoring/k8s/prometheus/prometheus-additional.yaml b/monitoring/k8s/prometheus/prometheus-additional.yaml deleted file mode 100644 index e62f51451..000000000 --- a/monitoring/k8s/prometheus/prometheus-additional.yaml +++ /dev/null @@ -1,7 +0,0 @@ -- job_name: "turbinia-auto-discover" - scrape_interval: 15s - kubernetes_sd_configs: - - role: pod - namespaces: - names: - - default \ No newline at end of file diff --git a/monitoring/k8s/prometheus/turbinia-custom-rules.yaml b/monitoring/k8s/prometheus/turbinia-custom-rules.yaml deleted file mode 100644 index 1f6624166..000000000 --- a/monitoring/k8s/prometheus/turbinia-custom-rules.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: monitoring.coreos.com/v1 -kind: PrometheusRule -metadata: - labels: - app.kubernetes.io/component: exporter - app.kubernetes.io/name: kube-prometheus - app.kubernetes.io/part-of: kube-prometheus - prometheus: k8s - role: alert-rules - name: turbinia-custom-rules - namespace: monitoring -spec: - @@JSONDATA@@ \ No newline at end of file diff --git a/monitoring/prometheus/prometheus.yaml b/monitoring/prometheus/prometheus.yaml deleted file mode 100644 index 81979def6..000000000 --- a/monitoring/prometheus/prometheus.yaml +++ /dev/null @@ -1,26 +0,0 @@ -global: - scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. - # scrape_timeout is set to the global default (10s). - external_labels: - environment: turbinia-gcp_node - -rule_files: - - '/etc/prometheus/prometheus.rules.yml' - -scrape_configs: - - job_name: 'turbinia-gcp' - gce_sd_configs: - # The GCP Project - - project: '' - zone: '' - filter: labels.turbinia-prometheus=true - refresh_interval: 120s - port: 9100 - - job_name: 'turbinia-app' - gce_sd_configs: - # The GCP Project - - project: '' - zone: '' - filter: labels.turbinia-prometheus=true - refresh_interval: 120s - port: 9200 \ No newline at end of file From b4cdbb098af75840a748fb08ef5fa261866f6fd4 Mon Sep 17 00:00:00 2001 From: Aaron Peterson Date: Wed, 25 Oct 2023 15:34:15 -0700 Subject: [PATCH 06/10] Re-order Issue template items (#1364) * re-order template and remove title * Add back title --- .github/ISSUE_TEMPLATE/feature_request.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index ee958d345..b563bf03d 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -11,15 +11,15 @@ body: Please fill in as much of the following form as you're able. - type: textarea attributes: - label: What would this feature improve or what problem would it solve? + label: What is the feature you are proposing? + description: Describe the feature. If you already have something in mind... PRs are welcome! validations: required: true - type: textarea attributes: - label: What is the feature you are proposing? - description: Describe the feature. If you already have something in mind... PRs are welcome! + label: What would this feature improve or what problem would it solve? validations: required: true - type: textarea attributes: - label: What alternatives have you considered? \ No newline at end of file + label: What alternatives have you considered? From 2a1cbff703b4bde7f2a322081edf20e56b39d447 Mon Sep 17 00:00:00 2001 From: Juan Leaniz Date: Thu, 26 Oct 2023 08:08:20 -0500 Subject: [PATCH 07/10] Add version command and decouple evidence requests (#1369) --- .../api/cli/turbinia_client/core/commands.py | 100 ++--------------- .../api/cli/turbinia_client/core/groups.py | 39 ++++++- .../cli/turbinia_client/factory/factory.py | 4 +- .../turbinia_client/helpers/click_helper.py | 101 ++++++++++++++++++ .../api/cli/turbinia_client/turbiniacli.py | 8 -- .../cli/turbinia_client/turbiniacli_tool.py | 11 +- 6 files changed, 150 insertions(+), 113 deletions(-) diff --git a/turbinia/api/cli/turbinia_client/core/commands.py b/turbinia/api/cli/turbinia_client/core/commands.py index d8a682637..db67ea47d 100644 --- a/turbinia/api/cli/turbinia_client/core/commands.py +++ b/turbinia/api/cli/turbinia_client/core/commands.py @@ -17,10 +17,10 @@ import os import logging import click -import base64 -import mimetypes import tarfile +from importlib.metadata import version as importlib_version + from turbinia_api_lib import exceptions from turbinia_api_lib import api_client from turbinia_api_lib.api import turbinia_requests_api @@ -274,95 +274,6 @@ def get_task( f'when calling get_task_status: {exception.body}') -@click.pass_context -def create_request(ctx: click.Context, *args: int, **kwargs: int) -> None: - """Creates and submits a new Turbinia request.""" - client: api_client.ApiClient = ctx.obj.api_client - api_instance = turbinia_requests_api.TurbiniaRequestsApi(client) - evidence_name = ctx.command.name - - # Normalize the evidence class name from lowercase to the original name. - evidence_name = ctx.obj.normalize_evidence_name(evidence_name) - # Build request and request_options objects to send to the API server. - request_options = list(ctx.obj.request_options.keys()) - request = {'evidence': {'type': evidence_name}, 'request_options': {}} - - if 'googlecloud' in evidence_name: - api_instance_config = turbinia_configuration_api.TurbiniaConfigurationApi( - client) - cloud_provider = api_instance_config.read_config()['CLOUD_PROVIDER'] - if cloud_provider != 'GCP': - log.error( - f'The evidence type {evidence_name} is Google Cloud only and ' - f'the configured provider for this Turbinia instance is ' - f'{cloud_provider}.') - return - - for key, value in kwargs.items(): - # If the value is not empty, add it to the request. - if kwargs.get(key): - # Check if the key is for evidence or request_options - if not key in request_options: - request['evidence'][key] = value - elif key in ('jobs_allowlist', 'jobs_denylist'): - jobs_list = value.split(',') - request['request_options'][key] = jobs_list - else: - request['request_options'][key] = value - - if all(key in request['request_options'] - for key in ('recipe_name', 'recipe_data')): - log.error('You can only provide one of recipe_data or recipe_name') - return - - recipe_name = request['request_options'].get('recipe_name') - if recipe_name: - if not recipe_name.endswith('.yaml'): - recipe_name = f'{recipe_name}.yaml' - # Fallback path for the recipe would be TURBINIA_CLI_CONFIG_PATH/recipe_name - # This is the same path where the client configuration is loaded from. - recipe_path_fallback = os.path.expanduser(ctx.obj.config_path) - recipe_path_fallback = os.path.join(recipe_path_fallback, recipe_name) - - if os.path.isfile(recipe_name): - recipe_path = recipe_name - elif os.path.isfile(recipe_path_fallback): - recipe_path = recipe_path_fallback - else: - log.error(f'Unable to load recipe {recipe_name}.') - return - - try: - with open(recipe_path, 'r', encoding='utf-8') as recipe_file: - # Read the file and convert to base64 encoded bytes. - recipe_bytes = recipe_file.read().encode('utf-8') - recipe_data = base64.b64encode(recipe_bytes) - except OSError as exception: - log.error(f'Error opening recipe file {recipe_path}: {exception}') - return - except TypeError as exception: - log.error(f'Error converting recipe data to Base64: {exception}') - return - # We found the recipe file, so we will send it to the API server - # via the recipe_data parameter. To do so, we need to pop recipe_name - # from the request so that we only have recipe_data. - request['request_options'].pop('recipe_name') - # recipe_data should be a UTF-8 encoded string. - request['request_options']['recipe_data'] = recipe_data.decode('utf-8') - - # Send the request to the API server. - try: - log.info(f'Sending request: {request}') - api_response = api_instance.create_request(request) - log.info(f'Received response: {api_response}') - except exceptions.ApiException as exception: - log.error( - f'Received status code {exception.status} ' - f'when calling create_request: {exception.body}') - except (TypeError, exceptions.ApiTypeError) as exception: - log.error(f'The request object is invalid. {exception}') - - @groups.evidence_group.command('summary') @click.pass_context @click.option( @@ -514,3 +425,10 @@ def upload_evidence( formatter.EvidenceMarkdownReport({}).dict_to_markdown( report, 0, format_keys=False)) click.echo(report) + + +@click.command('version') +def version(): + """Returns the turbinia-client package distribution version.""" + cli_version = importlib_version('turbinia-client') + click.echo(f'turbinia-client version {cli_version}') diff --git a/turbinia/api/cli/turbinia_client/core/groups.py b/turbinia/api/cli/turbinia_client/core/groups.py index d5a88fe0c..d6eed351b 100644 --- a/turbinia/api/cli/turbinia_client/core/groups.py +++ b/turbinia/api/cli/turbinia_client/core/groups.py @@ -15,6 +15,13 @@ """Turbinia API client command-line tool.""" import click +import logging +import sys + +from turbinia_api_lib import exceptions +from turbinia_client.factory import factory + +log = logging.getLogger('turbinia') @click.group('config') @@ -42,6 +49,32 @@ def jobs_group(): """Get a list of enabled Turbinia jobs.""" -@click.group('submit') -def submit_group(): - """Submit new requests to the Turbinia API server.""" +@click.pass_context +def setup_submit(ctx: click.Context): + try: + ctx.obj.evidence_mapping = ctx.obj.get_evidence_arguments() + ctx.obj.request_options = ctx.obj.get_request_options() + + # Build all the commands based on responses from the API server. + request_commands = factory.CommandFactory.create_dynamic_objects( + evidence_mapping=ctx.obj.evidence_mapping, + request_options=ctx.obj.request_options) + for command in request_commands: + submit_group.add_command(command) + except exceptions.ApiException as exception: + log.error( + 'Error while attempting to contact the API server during setup: %s', + exception) + sys.exit(-1) + + +@click.group('submit', chain=True, invoke_without_command=True) +@click.pass_context +def submit_group(ctx: click.Context): + """Submit new requests to the Turbinia API server. + + Please run this command without any arguments to view a list + of available evidence types. + """ + ctx.invoke(setup_submit) + click.echo(submit_group.get_help(ctx)) diff --git a/turbinia/api/cli/turbinia_client/factory/factory.py b/turbinia/api/cli/turbinia_client/factory/factory.py index 71602071d..aa7af545a 100644 --- a/turbinia/api/cli/turbinia_client/factory/factory.py +++ b/turbinia/api/cli/turbinia_client/factory/factory.py @@ -21,7 +21,6 @@ import click from turbinia_client.helpers import click_helper -from turbinia_client.core.commands import create_request T = TypeVar('T', bound='FactoryInterface') @@ -147,7 +146,8 @@ def create_dynamic_objects( request_options=request_options) OptionFactory.append_request_option_objects(params, request_options) cmd = CommandFactory.create_object( - name=evidence_name_lower, params=params, callback=create_request) + name=evidence_name_lower, params=params, + callback=click_helper.create_request) command_objects.append(cmd) return command_objects diff --git a/turbinia/api/cli/turbinia_client/helpers/click_helper.py b/turbinia/api/cli/turbinia_client/helpers/click_helper.py index c4556b7bc..d1b3a63d3 100644 --- a/turbinia/api/cli/turbinia_client/helpers/click_helper.py +++ b/turbinia/api/cli/turbinia_client/helpers/click_helper.py @@ -14,7 +14,19 @@ # limitations under the License. """Turbinia API client command-line tool.""" +import os +import logging +import click +import base64 + from typing import Tuple, Sequence +from turbinia_api_lib.api import turbinia_configuration_api +from turbinia_api_lib.api import turbinia_requests_api + +from turbinia_api_lib import exceptions +from turbinia_api_lib import api_client + +log = logging.getLogger('turbinia') def generate_option_parameters( @@ -23,3 +35,92 @@ def generate_option_parameters( name. """ return ((['--' + option_name], option_name), {'required': False, 'type': str}) + + +@click.pass_context +def create_request(ctx: click.Context, *args: int, **kwargs: int) -> None: + """Creates and submits a new Turbinia request.""" + client: api_client.ApiClient = ctx.obj.api_client + api_instance = turbinia_requests_api.TurbiniaRequestsApi(client) + evidence_name = ctx.command.name + + # Normalize the evidence class name from lowercase to the original name. + evidence_name = ctx.obj.normalize_evidence_name(evidence_name) + # Build request and request_options objects to send to the API server. + request_options = list(ctx.obj.request_options.keys()) + request = {'evidence': {'type': evidence_name}, 'request_options': {}} + + if 'googlecloud' in evidence_name: + api_instance_config = turbinia_configuration_api.TurbiniaConfigurationApi( + client) + cloud_provider = api_instance_config.read_config()['CLOUD_PROVIDER'] + if cloud_provider != 'GCP': + log.error( + f'The evidence type {evidence_name} is Google Cloud only and ' + f'the configured provider for this Turbinia instance is ' + f'{cloud_provider}.') + return + + for key, value in kwargs.items(): + # If the value is not empty, add it to the request. + if kwargs.get(key): + # Check if the key is for evidence or request_options + if not key in request_options: + request['evidence'][key] = value + elif key in ('jobs_allowlist', 'jobs_denylist'): + jobs_list = value.split(',') + request['request_options'][key] = jobs_list + else: + request['request_options'][key] = value + + if all(key in request['request_options'] + for key in ('recipe_name', 'recipe_data')): + log.error('You can only provide one of recipe_data or recipe_name') + return + + recipe_name = request['request_options'].get('recipe_name') + if recipe_name: + if not recipe_name.endswith('.yaml'): + recipe_name = f'{recipe_name}.yaml' + # Fallback path for the recipe would be TURBINIA_CLI_CONFIG_PATH/recipe_name + # This is the same path where the client configuration is loaded from. + recipe_path_fallback = os.path.expanduser(ctx.obj.config_path) + recipe_path_fallback = os.path.join(recipe_path_fallback, recipe_name) + + if os.path.isfile(recipe_name): + recipe_path = recipe_name + elif os.path.isfile(recipe_path_fallback): + recipe_path = recipe_path_fallback + else: + log.error(f'Unable to load recipe {recipe_name}.') + return + + try: + with open(recipe_path, 'r', encoding='utf-8') as recipe_file: + # Read the file and convert to base64 encoded bytes. + recipe_bytes = recipe_file.read().encode('utf-8') + recipe_data = base64.b64encode(recipe_bytes) + except OSError as exception: + log.error(f'Error opening recipe file {recipe_path}: {exception}') + return + except TypeError as exception: + log.error(f'Error converting recipe data to Base64: {exception}') + return + # We found the recipe file, so we will send it to the API server + # via the recipe_data parameter. To do so, we need to pop recipe_name + # from the request so that we only have recipe_data. + request['request_options'].pop('recipe_name') + # recipe_data should be a UTF-8 encoded string. + request['request_options']['recipe_data'] = recipe_data.decode('utf-8') + + # Send the request to the API server. + try: + log.info(f'Sending request: {request}') + api_response = api_instance.create_request(request) + log.info(f'Received response: {api_response}') + except exceptions.ApiException as exception: + log.error( + f'Received status code {exception.status} ' + f'when calling create_request: {exception.body}') + except (TypeError, exceptions.ApiTypeError) as exception: + log.error(f'The request object is invalid. {exception}') diff --git a/turbinia/api/cli/turbinia_client/turbiniacli.py b/turbinia/api/cli/turbinia_client/turbiniacli.py index 695e4f4f4..cf2dd1557 100644 --- a/turbinia/api/cli/turbinia_client/turbiniacli.py +++ b/turbinia/api/cli/turbinia_client/turbiniacli.py @@ -98,14 +98,6 @@ def setup(self) -> None: log.info( f'Using configuration instance name -> {self.config_instance:s}' f' with host {self.api_server_address:s}:{self.api_server_port:d}') - try: - self.evidence_mapping = self.get_evidence_arguments() - self.request_options = self.get_request_options() - except turbinia_api_lib.ApiException as exception: - log.error( - 'Error while attempting to contact the API server during setup: %s', - exception) - sys.exit(-1) @property def api_client(self): diff --git a/turbinia/api/cli/turbinia_client/turbiniacli_tool.py b/turbinia/api/cli/turbinia_client/turbiniacli_tool.py index 082aeaf61..ce860310b 100644 --- a/turbinia/api/cli/turbinia_client/turbiniacli_tool.py +++ b/turbinia/api/cli/turbinia_client/turbiniacli_tool.py @@ -23,7 +23,7 @@ from turbinia_client.turbiniacli import TurbiniaCli from turbinia_client.core import groups -from turbinia_client.factory import factory +from turbinia_client.core.commands import version _LOGGER_FORMAT = '%(asctime)s %(levelname)s %(name)s - %(message)s' logging.basicConfig(format=_LOGGER_FORMAT, level=logging.INFO) @@ -79,13 +79,6 @@ def cli(ctx: click.Context, config_instance: str, config_path: str) -> None: # Set up the tool based on the configuration file parameters. ctx.obj.setup() - # Build all the commands based on responses from the API server. - request_commands = factory.CommandFactory.create_dynamic_objects( - evidence_mapping=ctx.obj.evidence_mapping, - request_options=ctx.obj.request_options) - for command in request_commands: - groups.submit_group.add_command(command) - def main(): """Initialize the cli application.""" @@ -97,7 +90,7 @@ def main(): cli.add_command(groups.jobs_group) cli.add_command(groups.result_group) cli.add_command(groups.status_group) - + cli.add_command(version) try: cli.main() except (ConnectionRefusedError, urllib3_exceptions.MaxRetryError, From 3450b2dfda26fdfa5222c606ace5ddb7e96535f6 Mon Sep 17 00:00:00 2001 From: Juan Leaniz Date: Thu, 26 Oct 2023 08:09:41 -0500 Subject: [PATCH 08/10] Manage dependencies using Poetry (#1348) * Added Poetry configuration file and lock file * Updates to package management * Updates to Dockerfiles * Updated comments and dependencies * Cleanup old changes * Update requirements text files * Minor updates * Add skeleton setup.py for legacy compatibility test single stage dockerfilre * Updates to dockerfile * Updates to dockerfiles and scripts * Add poetry.toml file * Update dependencies * Update dockerfiles * Update dockerfiles * Update gh actions * Update dockerfile * Updates to docker-compose and dockerfile * Updates to docker files * Update docker file * Updates to docker file * Update dockerfiles * Update dockerfiles * Update poetry lock and dockerfiles * Add dockerignore files * Update dockerignore files * Update dockerignore files * Update dockerignore file * Update dockerignore file * Updates to dockerfiles and start script * Update legacy requirements files * Update dockerignore files and versioning * Add Ramses to authors file * Updates to client project files * Updates to poetry files * Updates * Updates * Update pyproject.toml for api-lib * review comments * Update documentation * fix typo in docs --- .github/workflows/actions.yml | 25 +- .github/workflows/e2e.yml | 2 +- .github/workflows/publish-pypi.yml | 107 + .gitignore | 2 +- AUTHORS | 4 +- dfvfs_requirements.txt | 32 - docker/api_server/.dockerignore | 2 - docker/api_server/Dockerfile | 47 +- docker/api_server/Dockerfile.dockerignore | 17 + docker/api_server/start.sh | 7 +- docker/local/docker-compose.yml | 25 +- docker/server/Dockerfile | 36 +- docker/server/Dockerfile.dockerignore | 17 + docker/server/start.sh | 4 +- docker/tests/Dockerfile | 111 + docker/tests/Dockerfile.dockerignore | 15 + docker/vscode/Dockerfile | 2 +- docker/worker/Dockerfile | 128 +- docker/worker/Dockerfile.dockerignore | 17 + docker/worker/start.sh | 4 +- docs/developer/contributing.md | 8 + docs/developer/sre-doc.md | 8 + poetry.lock | 4535 +++++++++++++++++++++ poetry.toml | 3 + pyproject.toml | 83 + requirements-test.txt | 1875 +++++++++ requirements-worker.txt | 1583 +++++++ requirements.txt | 1021 ++++- setup.py | 25 +- turbinia/__init__.py | 10 +- turbinia/api/api_server_test.py | 4 +- turbinia/api/cli/poetry.lock | 577 +++ turbinia/api/cli/pyproject.toml | 24 + turbinia/api/cli/requirements.txt | 212 +- turbinia/api/cli/setup.py | 30 - turbinia/api/client/poetry.lock | 407 ++ turbinia/api/client/pyproject.toml | 8 +- turbinia/api/client/setup.cfg | 2 - turbinia/api/client/setup.py | 50 - turbinia/lib/utils.py | 1 + 40 files changed, 10715 insertions(+), 355 deletions(-) create mode 100644 .github/workflows/publish-pypi.yml delete mode 100644 dfvfs_requirements.txt delete mode 100644 docker/api_server/.dockerignore create mode 100644 docker/api_server/Dockerfile.dockerignore create mode 100644 docker/server/Dockerfile.dockerignore create mode 100644 docker/tests/Dockerfile create mode 100644 docker/tests/Dockerfile.dockerignore create mode 100644 docker/worker/Dockerfile.dockerignore create mode 100644 poetry.lock create mode 100644 poetry.toml create mode 100644 pyproject.toml create mode 100644 requirements-test.txt create mode 100644 requirements-worker.txt create mode 100644 turbinia/api/cli/poetry.lock create mode 100644 turbinia/api/cli/pyproject.toml delete mode 100644 turbinia/api/cli/setup.py create mode 100644 turbinia/api/client/poetry.lock delete mode 100644 turbinia/api/client/setup.cfg delete mode 100644 turbinia/api/client/setup.py diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index 5c4ccc455..17f3f5c9c 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -18,24 +18,17 @@ jobs: - name: Pull latest docker image for cache run: | docker pull ${{ matrix.docker_base_image }} - docker pull us-docker.pkg.dev/osdfir-registry/turbinia/release/turbinia-worker-dev:latest - - name: Build Turbinia worker docker image - run: docker build --build-arg PPA_TRACK=${{ matrix.gift_ppa_track }} --cache-from=${{ matrix.docker_base_image }},us-docker.pkg.dev/osdfir-registry/turbinia/release/turbinia-worker-dev:latest -t turbinia-worker-dev -f docker/worker/Dockerfile . - - name: Run test (turbinia-worker) container + docker pull us-docker.pkg.dev/osdfir-registry/turbinia/release/turbinia-unit-tests:latest + - name: Build Turbinia unit test docker image + run: docker build --build-arg PPA_TRACK=${{ matrix.gift_ppa_track }} --cache-from=${{ matrix.docker_base_image }},us-docker.pkg.dev/osdfir-registry/turbinia/release/turbinia-unit-tests:latest -t turbinia-unit-tests -f docker/tests/Dockerfile . + - name: Run test (turbinia-unit-tests) container run: | - docker run --name turbinia-worker --entrypoint "/bin/bash" -it -d -t turbinia-worker-dev:latest + docker run --name turbinia-unit-tests --entrypoint "/bin/bash" -it -d -t turbinia-unit-tests:latest - name: Configure python3 run: | - docker exec -u root -t turbinia-worker bash -c "update-alternatives --install /usr/bin/python python /usr/bin/python3 1" - docker exec -u root -t turbinia-worker bash -c "/usr/bin/python -V" - - name: Install and configure test dependencies - run: | - docker exec -u root -t turbinia-worker bash -c "/usr/bin/python -m pip install --quiet --upgrade pip" - docker exec -u root -t turbinia-worker bash -c "cd /tmp/turbinia/api/client && /usr/bin/python -m pip install --quiet ." - docker exec -u root -t turbinia-worker bash -c "/usr/bin/python -m pip install --quiet -r /tmp/turbinia/api/cli/requirements.txt" - docker exec -u root -t turbinia-worker bash -c "/usr/bin/python -m pip install --quiet mock nose coverage yapf" - docker exec -u root -t turbinia-worker bash -c "/usr/bin/python -m pip install --quiet tox" + docker exec -u root -t turbinia-unit-tests bash -c "update-alternatives --install /usr/bin/python python /usr/bin/python3 1" + docker exec -u root -t turbinia-unit-tests bash -c "/usr/bin/python -V" - name: Run Tests run: | - docker exec -u root -t turbinia-worker bash -c "cd /tmp && ./run_tests.py" - docker exec -u root -t turbinia-worker bash -c "cd /tmp && tox --sitepackages ${TOXENV}" + docker exec -u root -t turbinia-unit-tests bash -c "poetry run ./run_tests.py" + docker exec -u root -t turbinia-unit-tests bash -c "tox --sitepackages ${TOXENV}" diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 8f9eea6b4..c6af2acd9 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -40,4 +40,4 @@ jobs: - name: Run E2E test run: | chmod +x ./turbinia/e2e/e2e-local.sh - ./turbinia/e2e/e2e-local.sh + ./turbinia/e2e/e2e-local.sh \ No newline at end of file diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml new file mode 100644 index 000000000..11be82fd7 --- /dev/null +++ b/.github/workflows/publish-pypi.yml @@ -0,0 +1,107 @@ +name: Publish Python 🐍 distribution 📦 to PyPI and TestPyPI + +on: + release: + types: [published] + +jobs: + build: + name: Build distribution 📦 + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.10" + - name: Install pypa/build + run: python3 -m pip install poetry wheel --user + - name: Build a binary wheel and a source tarball + run: python3 -m poetry build + - name: Store the distribution packages + uses: actions/upload-artifact@v3 + with: + name: python-package-distributions + path: dist/ + + publish-to-pypi: + name: Publish Python 🐍 distribution 📦 to PyPI + if: startsWith(github.ref, 'refs/tags/20') # only publish to PyPI on tag pushes + needs: + - build + runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/p/turbinia + permissions: + id-token: write # IMPORTANT: mandatory for trusted publishing + + steps: + - name: Download all the dists + uses: actions/download-artifact@v3 + with: + name: python-package-distributions + path: dist/ + - name: Publish distribution 📦 to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + + github-release: + name: >- + Sign the Python 🐍 distribution 📦 with Sigstore + and upload them to GitHub Release + needs: + - publish-to-pypi + runs-on: ubuntu-latest + + permissions: + contents: write # IMPORTANT: mandatory for making GitHub Releases + id-token: write # IMPORTANT: mandatory for sigstore + + steps: + - name: Download all the dists + uses: actions/download-artifact@v3 + with: + name: python-package-distributions + path: dist/ + - name: Sign the dists with Sigstore + uses: sigstore/gh-action-sigstore-python@v1.2.3 + with: + inputs: >- + ./dist/*.tar.gz + ./dist/*.whl + - name: Upload artifact signatures to GitHub Release + # Te release must already be created or this will fail. + env: + GITHUB_TOKEN: ${{ github.token }} + # Upload to GitHub Release using the `gh` CLI. + # `dist/` contains the built packages, and the + # sigstore-produced signatures and certificates. + run: >- + gh release upload + '${{ github.ref_name }}' dist/** + --repo '${{ github.repository }}' + + publish-to-testpypi: + name: Publish Python 🐍 distribution 📦 to TestPyPI + needs: + - build + runs-on: ubuntu-latest + + environment: + name: testpypi + url: https://test.pypi.org/p/turbinia + + permissions: + id-token: write # IMPORTANT: mandatory for trusted publishing + + steps: + - name: Download all the dists + uses: actions/download-artifact@v3 + with: + name: python-package-distributions + path: dist/ + - name: Publish distribution 📦 to TestPyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + repository-url: https://test.pypi.org/legacy/ diff --git a/.gitignore b/.gitignore index 03386caf8..ef2449046 100644 --- a/.gitignore +++ b/.gitignore @@ -41,4 +41,4 @@ venv/ .venv/ # Ignore OpenAPI code generator temporary files -.openapi-generator/ \ No newline at end of file +.openapi-generator/ diff --git a/AUTHORS b/AUTHORS index e82be9af1..4e3e8bdbd 100644 --- a/AUTHORS +++ b/AUTHORS @@ -5,8 +5,10 @@ Turbinia is developed by (in alphabetical order): * Google Inc. (*@google.com) * Aaron Peterson (aaronp@gmail.com) -* Wajih Yassine (wajihyassine@gmail.com) * Johan Berggren (jberggren@gmail.com) +* Juan Leaniz (juan.leaniz@gmail.com) +* Ramses de Beer (ramsesdebeer@gmail.com) +* Wajih Yassine (wajihyassine@gmail.com) To reach the authors, please use the Turbinia development mailing list . diff --git a/dfvfs_requirements.txt b/dfvfs_requirements.txt deleted file mode 100644 index 8b2d6accc..000000000 --- a/dfvfs_requirements.txt +++ /dev/null @@ -1,32 +0,0 @@ -dfvfs >= 20210606 -pip >= 7.0.0 -PyYAML >= 3.10 -cffi >= 1.9.1 -cryptography >= 2.0.2 -dfdatetime >= 20210509 -dfimagetools >= 20220312 -dtfabric >= 20170524 -idna >= 2.5 -libbde-python >= 20140531 -libewf-python >= 20131210 -libfsapfs-python >= 20201107 -libfsext-python >= 20210721 -libfshfs-python >= 20210722 -libfsntfs-python >= 20200921 -libfsxfs-python >= 20210726 -libfvde-python >= 20160719 -libfwnt-python >= 20210717 -libluksde-python >= 20200101 -libmodi-python >= 20210405 -libqcow-python >= 20201213 -libsigscan-python >= 20191221 -libsmdev-python >= 20140529 -libsmraw-python >= 20140612 -libvhdi-python >= 20201014 -libvmdk-python >= 20140421 -libvsgpt-python >= 20210207 -libvshadow-python >= 20160109 -libvslvm-python >= 20210807 -pytsk3 >= 20210419 -pyxattr >= 0.7.2 -pyOpenSSL<=21.0.0 diff --git a/docker/api_server/.dockerignore b/docker/api_server/.dockerignore deleted file mode 100644 index a544cc292..000000000 --- a/docker/api_server/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -nodemodules -dist \ No newline at end of file diff --git a/docker/api_server/Dockerfile b/docker/api_server/Dockerfile index 9ae13da84..5899dc800 100644 --- a/docker/api_server/Dockerfile +++ b/docker/api_server/Dockerfile @@ -7,38 +7,45 @@ COPY web/. . RUN npm run build # Build Turbinia API Server, copy from build, and setup rest of requirements -FROM ubuntu:22.04 +FROM ubuntu:22.04 as build-stage2 + +ENV DEBIAN_FRONTEND=noninteractive \ + PIP_NO_CACHE_DIR=1 -ENV DEBIAN_FRONTEND=noninteractive COPY --from=build-stage /tmp/web/dist /web/dist RUN apt-get update && apt-get -y upgrade -RUN apt-get -y install python3-pip git wget supervisor curl - +RUN apt-get -y install git python3-pip RUN pip3 install pip --upgrade -RUN pip3 install urllib3 cryptography requests --upgrade - -ADD requirements.txt /tmp/ -RUN cd /tmp/ && pip3 install -r requirements.txt - -ADD . /tmp/ - -# unshallow and fetch all tags so our build systems pickup the correct git tag if it's a shallow clone -RUN if $(cd /tmp/ && git rev-parse --is-shallow-repository); then cd /tmp/ && git fetch --prune --unshallow && git fetch --depth=1 origin +refs/tags/*:refs/tags/*; fi - -RUN cd /tmp/ && python3 setup.py install - -RUN useradd -r -s /bin/nologin -u 999 turbinia +RUN pip3 install poetry +RUN useradd -r -s /sbin/nologin -u 999 turbinia RUN mkdir /etc/turbinia && mkdir -p /mnt/turbinia/ && mkdir -p /var/lib/turbinia/ \ && mkdir -p /var/log/turbinia/ && chown -R turbinia:turbinia /mnt/turbinia/ \ && mkdir -p /etc/turbinia/ \ && chown -R turbinia:turbinia /var/lib/turbinia/ \ && chown -R turbinia:turbinia /etc/turbinia/ \ - && chown -R turbinia:turbinia /var/log/turbinia/ + && chown -R turbinia:turbinia /var/log/turbinia/ \ + && mkdir -p /home/turbinia && chown -R turbinia:turbinia /home/turbinia -COPY docker/api_server/start.sh /home/turbinia/start.sh -RUN chmod +rwx /home/turbinia/start.sh +# Drop privileges and set the working directory USER turbinia +WORKDIR /home/turbinia + +# Copy requirements and install dependencies to cache them in docker layer +COPY --chown=turbinia:turbinia ./pyproject.toml ./poetry.toml ./poetry.lock /home/turbinia/ +RUN poetry install --no-interaction --no-ansi --no-root + +ENV PATH="/home/turbinia/.venv/bin:$PATH" \ + VIRTUAL_ENV=/home/turbinia/.venv + +# Copy the source directory to the container +COPY --chown=turbinia:turbinia . /home/turbinia/ +COPY --chown=turbinia:turbinia docker/api_server/start.sh /home/turbinia/start.sh +RUN chmod +rwx /home/turbinia/start.sh + +# Install Turbinia package -- will skip dependencies if installed +RUN poetry install --no-interaction --no-ansi + CMD ["/home/turbinia/start.sh"] # Expose Prometheus and API endpoints. EXPOSE 9200/tcp diff --git a/docker/api_server/Dockerfile.dockerignore b/docker/api_server/Dockerfile.dockerignore new file mode 100644 index 000000000..58a28afbf --- /dev/null +++ b/docker/api_server/Dockerfile.dockerignore @@ -0,0 +1,17 @@ +nodemodules +dist +.git +.venv +.vscode +test_data +.github +.devcontainer +docs +config +build +*.pyc +*.pyo +*.pyd +__pycache__ +.cache +turbinia.egg-info diff --git a/docker/api_server/start.sh b/docker/api_server/start.sh index dedd0db70..654c9afeb 100755 --- a/docker/api_server/start.sh +++ b/docker/api_server/start.sh @@ -7,7 +7,12 @@ then fi # Start Turbinia API server -/usr/local/bin/turbiniactl api_server +if [ ! -z ${TURBINIA_LOG_FILE+x} ] +then + poetry run turbiniactl $TURBINIA_EXTRA_ARGS -L $TURBINIA_LOG_FILE api_server +else + poetry run turbiniactl $TURBINIA_EXTRA_ARGS api_server +fi # Don't exit while sleep 1000; do :; done \ No newline at end of file diff --git a/docker/local/docker-compose.yml b/docker/local/docker-compose.yml index 74699d52d..ac7d96ecb 100644 --- a/docker/local/docker-compose.yml +++ b/docker/local/docker-compose.yml @@ -57,17 +57,18 @@ services: - LC_ALL=C.UTF-8 - LANG=C.UTF-8 - TURBINIA_EXTRA_ARGS=${TURBINIA_EXTRA_ARGS} - # Uncomment below in case you want to run a second worker on the same host. - # turbinia-worker2: - # #image: "turbinia-worker-dev" # Use this for local development and comment out below line - # image: "us-docker.pkg.dev/osdfir-registry/turbinia/release/turbinia-worker:latest" # Latest stable - # container_name: turbinia-worker2 - # privileged: true - # volumes: - # - $PWD/evidence:/evidence - # - $PWD/conf/turbinia.conf:/etc/turbinia/turbinia.conf + # Uncomment below in case you want to run a second worker on the same host. + # turbinia-worker2: + # image: "turbinia-worker-dev" # Use this for local development and comment out below line + # image: "us-docker.pkg.dev/osdfir-registry/turbinia/release/turbinia-worker:latest" # Latest stable + # container_name: turbinia-worker2 + # privileged: true - # environment: - # - LC_ALL=C.UTF-8 - # - LANG=C.UTF-8 + # volumes: + # - $PWD/evidence:/evidence + # - $PWD/conf/turbinia.conf:/etc/turbinia/turbinia.conf + + # environment: + # - LC_ALL=C.UTF-8 + # - LANG=C.UTF-8 diff --git a/docker/server/Dockerfile b/docker/server/Dockerfile index 5a9913e89..7e21ff1e0 100644 --- a/docker/server/Dockerfile +++ b/docker/server/Dockerfile @@ -13,28 +13,38 @@ RUN apt-get update && apt-get -y upgrade && apt-get -y install \ sudo \ && apt-get clean && rm -rf /var/cache/apt/* /var/lib/apt/lists/* -RUN pip3 install pip --upgrade \ - && pip3 install urllib3 cryptography requests --upgrade +RUN pip3 install pip --upgrade +RUN pip3 install poetry -ADD . /tmp/ -RUN cd /tmp/ && pip3 install -r requirements.txt - -# unshallow and fetch all tags so our build systems pickup the correct git tag if it's a shallow clone -RUN if $(cd /tmp/ && git rev-parse --is-shallow-repository); then cd /tmp/ && git fetch --prune --unshallow && git fetch --depth=1 origin +refs/tags/*:refs/tags/*; fi \ - && cd /tmp/ && python3 setup.py install - -RUN useradd -r -s /bin/nologin -u 999 turbinia +RUN useradd -r -s /sbin/nologin -u 999 turbinia RUN mkdir /etc/turbinia && mkdir -p /mnt/turbinia/ && mkdir -p /var/lib/turbinia/ \ && mkdir -p /var/log/turbinia/ && chown -R turbinia:turbinia /mnt/turbinia/ \ && mkdir -p /etc/turbinia/ \ && chown -R turbinia:turbinia /var/lib/turbinia/ \ && chown -R turbinia:turbinia /etc/turbinia/ \ - && chown -R turbinia:turbinia /var/log/turbinia/ + && chown -R turbinia:turbinia /var/log/turbinia/ \ + && mkdir -p /home/turbinia && chown -R turbinia:turbinia /home/turbinia -COPY docker/server/start.sh /home/turbinia/start.sh -RUN chmod +rwx /home/turbinia/start.sh +# Drop privileges and set the working directory USER turbinia +WORKDIR /home/turbinia + +# Copy requirements and install dependencies to cache them in docker layer +COPY --chown=turbinia:turbinia ./pyproject.toml ./poetry.toml ./poetry.lock /home/turbinia/ +RUN poetry install --no-interaction --no-ansi --no-root + +ENV PATH="/home/turbinia/.venv/bin:$PATH" \ + VIRTUAL_ENV=/home/turbinia/.venv + +# Copy the source directory to the container +COPY --chown=turbinia:turbinia . /home/turbinia/ +COPY --chown=turbinia:turbinia docker/server/start.sh /home/turbinia/start.sh +RUN chmod +rwx /home/turbinia/start.sh + +# Install Turbinia package -- will skip dependencies if installed +RUN poetry install --no-interaction --no-ansi + CMD ["/home/turbinia/start.sh"] # Expose Prometheus endpoint. EXPOSE 9200/tcp diff --git a/docker/server/Dockerfile.dockerignore b/docker/server/Dockerfile.dockerignore new file mode 100644 index 000000000..58a28afbf --- /dev/null +++ b/docker/server/Dockerfile.dockerignore @@ -0,0 +1,17 @@ +nodemodules +dist +.git +.venv +.vscode +test_data +.github +.devcontainer +docs +config +build +*.pyc +*.pyo +*.pyd +__pycache__ +.cache +turbinia.egg-info diff --git a/docker/server/start.sh b/docker/server/start.sh index 9c8ed8bab..e20c6266d 100644 --- a/docker/server/start.sh +++ b/docker/server/start.sh @@ -9,7 +9,7 @@ fi # Use log file path from environment variable is it exists, else get the path from the config. if [ ! -z ${TURBINIA_LOG_FILE+x} ] then - /usr/local/bin/turbiniactl $TURBINIA_EXTRA_ARGS -L $TURBINIA_LOG_FILE server + poetry run turbiniactl $TURBINIA_EXTRA_ARGS -L $TURBINIA_LOG_FILE server else - /usr/local/bin/turbiniactl $TURBINIA_EXTRA_ARGS server + poetry run turbiniactl $TURBINIA_EXTRA_ARGS server fi diff --git a/docker/tests/Dockerfile b/docker/tests/Dockerfile new file mode 100644 index 000000000..0acd57f58 --- /dev/null +++ b/docker/tests/Dockerfile @@ -0,0 +1,111 @@ +FROM ubuntu:22.04 +ENV DEBIAN_FRONTEND=noninteractive \ + PIP_NO_CACHE_DIR=1 +ARG PPA_TRACK=stable + +RUN apt-get update && apt-get -y upgrade && apt-get -y install \ + apt-transport-https \ + apt-utils \ + ca-certificates \ + curl \ + git \ + gpg \ + john \ + john-data \ + libssl-dev \ + libterm-readline-gnu-perl \ + libtool \ + lvm2 \ + pocl-opencl-icd \ + p7zip-full \ + pkg-config \ + python3-pip \ + python3.10-venv \ + software-properties-common \ + sudo \ + testdisk \ + tox \ + wget \ + && apt-get clean && rm -rf /var/cache/apt/* /var/lib/apt/lists/* + +# Install Poetry +RUN pip3 install pip --upgrade +RUN pip3 install poetry + +# Install various packages from the GIFT PPA +# bulkextractor +# docker-explorer +# Sleuthkit +RUN add-apt-repository -y ppa:gift/$PPA_TRACK +RUN apt-get update && apt-get -y install \ + bulk-extractor \ + docker-explorer-tools \ + sleuthkit \ + && apt-get clean && rm -rf /var/cache/apt/* /var/lib/apt/lists/* + +# Add turbinia user to system and sudoers +RUN useradd -r -s /sbin/nologin -G disk,sudo -u 999 turbinia +RUN echo "turbinia ALL = (root) NOPASSWD: ALL" > /etc/sudoers.d/turbinia +RUN echo "Defaults secure_path=\"/home/turbinia/.venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"" >> /etc/sudoers.d/turbinia + +# Install yara rules and fraken binary. +RUN cd /opt \ + && git clone https://github.com/Neo23x0/signature-base.git \ + && sudo chown -R turbinia:turbinia /opt/signature-base \ + && find /opt/signature-base -type f -not -iname '*.yar' -not -iname '*.yara' -not -iname 'file-type-signatures.txt' -delete +COPY turbinia/config/rules/*.yar /opt/signature-base/yara/ +RUN mkdir -p /opt/fraken && chown -R turbinia:turbinia /opt/fraken +COPY --from=us-docker.pkg.dev/osdfir-registry/turbinia/release/fraken:latest --chown=turbinia:turbinia /bin/fraken /opt/fraken/fraken + +# Install container-explorer +RUN wget -O /tmp/container-explorer-setup.sh https://raw.githubusercontent.com/google/container-explorer/main/script/setup.sh +RUN chmod +x /tmp/container-explorer-setup.sh +RUN sudo /tmp/container-explorer-setup.sh install + +# Setup turbinia user folders and permissions +RUN mkdir /etc/turbinia && mkdir -p /mnt/turbinia/ && mkdir -p /var/lib/turbinia/ \ + && mkdir -p /etc/turbinia/ && chown -R turbinia:turbinia /etc/turbinia/ \ + && mkdir -p /var/log/turbinia/ && chown -R turbinia:turbinia /mnt/turbinia/ \ + && chown -R turbinia:turbinia /var/lib/turbinia/ \ + && chown -R turbinia:turbinia /var/log/turbinia/ \ + && mkdir -p /home/turbinia && chown -R turbinia:turbinia /home/turbinia + +# Install latest hashcat +RUN cd /home/turbinia \ + && wget https://hashcat.net/files/hashcat-6.2.6.7z \ + && 7z x hashcat-6.2.6.7z \ + && chown -R turbinia:turbinia /home/turbinia/hashcat-6.2.6/ \ + && cp /home/turbinia/hashcat-6.2.6/hashcat.bin /home/turbinia/hashcat-6.2.6/hashcat \ + && rm -f /home/turbinia/hashcat-6.2.6.7z +ENV PATH="$PATH:/home/turbinia/hashcat-6.2.6/" + +# Get a decent password list for john/hashcat +RUN cd /home/turbinia && echo "" > password.lst +RUN cd /home/turbinia && curl -s https://raw.githubusercontent.com/danielmiessler/SecLists/285474cf9bff85f3323c5a1ae436f78acd1cb62c/Passwords/UserPassCombo-Jay.txt >> password.lst +RUN cd /home/turbinia && curl -s https://raw.githubusercontent.com/danielmiessler/SecLists/master/Passwords/Common-Credentials/10-million-password-list-top-1000000.txt >> password.lst +RUN cp /home/turbinia/password.lst /root/ + +# Copy Kubernetes support tool to home folder +COPY --chown=turbinia:turbinia k8s/tools/check-lockfile.py /home/turbinia/check-lockfile.py + +# Set the working directory +WORKDIR /home/turbinia + +# Copy only requirements, to cache them in docker layer +COPY --chown=turbinia:turbinia ./pyproject.toml ./poetry.toml ./poetry.lock /home/turbinia/ + +# Install dependencies using Poetry +RUN poetry install --no-interaction --no-ansi -E worker -E gcp --with test --no-root +RUN poetry run python3 -m pip install impacket --no-deps + +# Activate the virtualenv +ENV PATH="/home/turbinia/.venv/bin:$PATH" \ + VIRTUAL_ENV=/home/turbinia/.venv + +# Install Turbinia and dependencies in /home/turbinia/.venv using Poetry +ADD . /home/turbinia/ +# RUN if $(cd /tmp/ && git rev-parse --is-shallow-repository); then cd /tmp/ && git fetch --prune --unshallow && git fetch --depth=1 origin +refs/tags/*:refs/tags/*; fi +RUN poetry install --no-interaction --no-ansi -E worker -E gcp --with test +# We need to install the current dev version of turbinia-api-lib for the cli tool test in case the API client changes +RUN cd turbinia/api/client && poetry install +CMD ["/bin/bash"] diff --git a/docker/tests/Dockerfile.dockerignore b/docker/tests/Dockerfile.dockerignore new file mode 100644 index 000000000..556e15501 --- /dev/null +++ b/docker/tests/Dockerfile.dockerignore @@ -0,0 +1,15 @@ +nodemodules +dist +.git +.venv +.vscode +.github +.devcontainer +config +build +*.pyc +*.pyo +*.pyd +__pycache__ +.cache +turbinia.egg-info diff --git a/docker/vscode/Dockerfile b/docker/vscode/Dockerfile index 34437b63c..c10e5ea2b 100644 --- a/docker/vscode/Dockerfile +++ b/docker/vscode/Dockerfile @@ -1,5 +1,5 @@ # We take the latest Turbinia worker release as a base image to make sure dependencies are already installed -FROM us-docker.pkg.dev/osdfir-registry/turbinia/release/turbinia-worker-dev:latest +FROM us-docker.pkg.dev/osdfir-registry/turbinia/release/turbinia-unit-test:latest USER root diff --git a/docker/worker/Dockerfile b/docker/worker/Dockerfile index d4ae66af4..da342c468 100644 --- a/docker/worker/Dockerfile +++ b/docker/worker/Dockerfile @@ -1,58 +1,7 @@ -# Multi-stage build -# Use: docker build --no-cache --build-arg PPA_TRACK="[staging|stable] GOVERSION=[1.20.6|1.18|?]" - -# Build 0 - fraken -FROM golang:alpine AS fraken-builder -RUN apk add --no-cache -t .build-deps \ - autoconf \ - automake \ - bison \ - build-base \ - curl \ - file \ - file-dev \ - flex \ - git \ - jansson \ - jansson-dev \ - jansson-static \ - libc-dev \ - libmagic \ - libmagic-static \ - libtool \ - linux-headers \ - openssl \ - openssl-dev \ - openssl-libs-static \ - py3-setuptools \ - python3 \ - python3-dev \ - sudo - -RUN set -x \ - && echo "Compiling Yara from source..." - -# Fetch and compile libyara -RUN mkdir -p /opt/fraken/yara -WORKDIR /opt/fraken/yara -RUN cd /opt/fraken/yara && curl -s -L --retry 5 "$(curl -s -L --retry 5 https://api.github.com/repos/VirusTotal/Yara/releases/latest | sed -n 's/.*"tarball_url": "\(.*\)",.*/\1/p')" | tar -xz --strip-components=1 -RUN ./bootstrap.sh -RUN sync -RUN ./configure --with-crypto \ - --enable-magic \ - --enable-cuckoo -RUN make -RUN sudo make install - -# Compile fraken statically -COPY tools/fraken/* /opt/fraken/ -RUN cd /opt/fraken && GOOS=linux GOARCH=amd64 go build -a -v -ldflags="-linkmode=external -extldflags=-static" -installsuffix netgo -tags yara_static,osusergo,netgo -o fraken - # Build 1 - Turbinia Worker -FROM ubuntu:22.04 AS worker-builder -ENV DEBIAN_FRONTEND=noninteractive -ENV PIP_NO_CACHE_DIR=1 - +FROM ubuntu:22.04 +ENV DEBIAN_FRONTEND=noninteractive \ + PIP_NO_CACHE_DIR=1 ARG PPA_TRACK=stable RUN apt-get update && apt-get -y upgrade && apt-get -y install \ @@ -65,6 +14,7 @@ RUN apt-get update && apt-get -y upgrade && apt-get -y install \ john-data \ libleveldb1d \ libleveldb-dev \ + libssl-dev \ libterm-readline-gnu-perl \ lvm2 \ pocl-opencl-icd \ @@ -76,51 +26,24 @@ RUN apt-get update && apt-get -y upgrade && apt-get -y install \ wget \ && apt-get clean && rm -rf /var/cache/apt/* /var/lib/apt/lists/* -ADD requirements.txt /tmp/ -RUN cd /tmp/ && pip3 install -r requirements.txt - RUN pip3 install pip --upgrade -RUN pip3 install requests --upgrade -RUN pip3 install urllib3 cryptography --upgrade - -# Install third-party dependencies -# dfwdewey -# pyhindsight -# impacket -RUN pip3 install dfDewey -RUN pip3 install pyhindsight -RUN pip3 install impacket --no-deps +RUN pip3 install poetry # Install various packages from the GIFT PPA # bulkextractor -# dfImageTools # docker-explorer -# libbde-tools -# libfsapfs-tools -# libluksde-tools -# Plaso # Sleuthkit RUN add-apt-repository -y ppa:gift/$PPA_TRACK RUN apt-get update && apt-get -y install \ bulk-extractor \ - dfimagetools-tools \ docker-explorer-tools \ - libbde-tools \ - libewf \ - libewf-python3 \ - libewf-tools \ - libfsapfs-tools \ - libluksde-tools \ - plaso-tools \ - python3-dfimagetools \ - python3-dfvfs \ - python3-plaso \ sleuthkit \ && apt-get clean && rm -rf /var/cache/apt/* /var/lib/apt/lists/* # Add turbinia user to system and sudoers -RUN useradd -r -s /bin/nologin -G disk,sudo -u 999 turbinia +RUN useradd -r -s /sbin/nologin -G disk,sudo -u 999 turbinia RUN echo "turbinia ALL = (root) NOPASSWD: ALL" > /etc/sudoers.d/turbinia +RUN echo "Defaults secure_path=\"/home/turbinia/.venv/bin:/opt/fraken:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"" >> /etc/sudoers.d/turbinia # Install yara rules and fraken binary. RUN cd /opt \ @@ -128,9 +51,8 @@ RUN cd /opt \ && sudo chown -R turbinia:turbinia /opt/signature-base \ && find /opt/signature-base -type f -not -iname '*.yar' -not -iname '*.yara' -not -iname 'file-type-signatures.txt' -delete COPY turbinia/config/rules/*.yar /opt/signature-base/yara/ -# Install fraken binary from multi-stage build -RUN mkdir -p /opt/fraken -COPY --chown=turbinia:turbinia --from=fraken-builder /opt/fraken/fraken /opt/fraken/fraken +RUN mkdir -p /opt/fraken && chown -R turbinia:turbinia /opt/fraken +COPY --from=us-docker.pkg.dev/osdfir-registry/turbinia/release/fraken:latest --chown=turbinia:turbinia /bin/fraken /opt/fraken/fraken # Install container-explorer RUN wget -O /tmp/container-explorer-setup.sh https://raw.githubusercontent.com/google/container-explorer/main/script/setup.sh @@ -150,8 +72,9 @@ RUN cd /home/turbinia \ && wget https://hashcat.net/files/hashcat-6.2.6.7z \ && 7z x hashcat-6.2.6.7z \ && chown -R turbinia:turbinia /home/turbinia/hashcat-6.2.6/ \ - && cp /home/turbinia/hashcat-6.2.6/hashcat.bin /home/turbinia/hashcat-6.2.6/hashcat -ENV PATH="$PATH:/home/turbinia/hashcat-6.2.6/" + && cp /home/turbinia/hashcat-6.2.6/hashcat.bin /home/turbinia/hashcat-6.2.6/hashcat \ + && rm -f /home/turbinia/hashcat-6.2.6.7z +ENV PATH="/home/turbinia/hashcat-6.2.6/:$PATH" # Get a decent password list for john/hashcat RUN cd /home/turbinia && echo "" > password.lst @@ -163,16 +86,25 @@ RUN echo ':\nd' > /home/turbinia/turbinia-password-cracking.rules # Copy Kubernetes support tool to home folder COPY --chown=turbinia:turbinia k8s/tools/check-lockfile.py /home/turbinia/check-lockfile.py -# Install Turbinia -# unshallow and fetch all tags so our build systems pickup the correct git tag if it's a shallow clone -# install turbinia and cleanup /tmp -ADD . /tmp/ -RUN if $(cd /tmp/ && git rev-parse --is-shallow-repository); then cd /tmp/ && git fetch --prune --unshallow && git fetch --depth=1 origin +refs/tags/*:refs/tags/*; fi \ - && cd /tmp/ && python3 setup.py install - -COPY docker/worker/start.sh /home/turbinia/start.sh -RUN chmod +rwx /home/turbinia/start.sh +# Drop privileges and set the working directory USER turbinia +WORKDIR /home/turbinia + +# Copy requirements and install dependencies to cache them in docker layer +COPY --chown=turbinia:turbinia ./pyproject.toml ./poetry.toml ./poetry.lock /home/turbinia/ +RUN poetry install --no-interaction --no-ansi -E worker --no-root +RUN poetry run pip3 install impacket --no-deps +ENV PATH="/home/turbinia/.venv/bin:$PATH" \ + VIRTUAL_ENV=/home/turbinia/.venv + +# Copy the source directory to the container +COPY --chown=turbinia:turbinia . /home/turbinia/ +COPY --chown=turbinia:turbinia docker/worker/start.sh /home/turbinia/start.sh +RUN chmod +rwx /home/turbinia/start.sh + +# Install Turbinia package -- will skip dependencies if installed +RUN poetry install --no-interaction --no-ansi -E worker + CMD ["/home/turbinia/start.sh"] # Expose Prometheus endpoint. EXPOSE 9200/tcp diff --git a/docker/worker/Dockerfile.dockerignore b/docker/worker/Dockerfile.dockerignore new file mode 100644 index 000000000..58a28afbf --- /dev/null +++ b/docker/worker/Dockerfile.dockerignore @@ -0,0 +1,17 @@ +nodemodules +dist +.git +.venv +.vscode +test_data +.github +.devcontainer +docs +config +build +*.pyc +*.pyo +*.pyd +__pycache__ +.cache +turbinia.egg-info diff --git a/docker/worker/start.sh b/docker/worker/start.sh index c369aa0b7..91277855c 100644 --- a/docker/worker/start.sh +++ b/docker/worker/start.sh @@ -35,9 +35,9 @@ trap _terminate SIGTERM # Use log file path from environment variable is it exists, else get the path from the config. if [ ! -z ${TURBINIA_LOG_FILE+x} ] then - /usr/local/bin/turbiniactl $TURBINIA_EXTRA_ARGS -L $TURBINIA_LOG_FILE $WORKER & + poetry run turbiniactl $TURBINIA_EXTRA_ARGS -L $TURBINIA_LOG_FILE $WORKER & else - /usr/local/bin/turbiniactl $TURBINIA_EXTRA_ARGS $WORKER & + poetry run turbiniactl $TURBINIA_EXTRA_ARGS $WORKER & fi child_pid=$! diff --git a/docs/developer/contributing.md b/docs/developer/contributing.md index 53abf9202..0988318fa 100644 --- a/docs/developer/contributing.md +++ b/docs/developer/contributing.md @@ -97,6 +97,14 @@ Various Turbinia specific additions/variations are: instead of "# pylint: disable=E0213". For a list of overrides see: http://docs.pylint.org/features.html +#### Updating dependencies + +If you are adding a new dependency or changing the version of a dependency: + +* Edit ```pyproject.toml``` with the new version for the dependency. +* Run ```poetry lock``` to resolve any dependency conflicts. This will regenerate ```poetry.lock```. + + #### The small print Contributions made by corporations are covered by a different agreement than the diff --git a/docs/developer/sre-doc.md b/docs/developer/sre-doc.md index 47bc4e944..b02c53b58 100644 --- a/docs/developer/sre-doc.md +++ b/docs/developer/sre-doc.md @@ -6,6 +6,14 @@ This document will cover topics to manage Turbinia infrastructure in cloud and includes Prometheus/Grafana monitoring stack how tos. +## Cutting a new Turbinia release +If you are creating a new Turbinia release: + +* Update the version in ```pyproject.toml``` and commit the change to ```master```. +* Run ```poetry lock``` to update dependencies and identify potential conflicts. +* Create a new release and tag on Github. +* Publish the new release once all tests pass. + ## GCP diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 000000000..1fd07f4fd --- /dev/null +++ b/poetry.lock @@ -0,0 +1,4535 @@ +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "acstore" +version = "20230519" +description = "Attribute Container Storage (ACStore)." +optional = true +python-versions = "*" +files = [ + {file = "acstore-20230519.tar.gz", hash = "sha256:b9f6d7b1609b9758fc0944ec25e443de0bd1acb6957388c2de5acc641e13d808"}, +] + +[package.dependencies] +pip = ">=7.0.0" +PyYAML = ">=3.10" + +[[package]] +name = "adal" +version = "1.2.7" +description = "Note: This library is already replaced by MSAL Python, available here: https://pypi.org/project/msal/ .ADAL Python remains available here as a legacy. The ADAL for Python library makes it easy for python application to authenticate to Azure Active Directory (AAD) in order to access AAD protected web resources." +optional = false +python-versions = "*" +files = [ + {file = "adal-1.2.7-py2.py3-none-any.whl", hash = "sha256:2a7451ed7441ddbc57703042204a3e30ef747478eea022c70f789fc7f084bc3d"}, + {file = "adal-1.2.7.tar.gz", hash = "sha256:d74f45b81317454d96e982fd1c50e6fb5c99ac2223728aea8764433a39f566f1"}, +] + +[package.dependencies] +cryptography = ">=1.1.0" +PyJWT = ">=1.0.0,<3" +python-dateutil = ">=2.1.0,<3" +requests = ">=2.0.0,<3" + +[[package]] +name = "amqp" +version = "5.1.1" +description = "Low-level AMQP client for Python (fork of amqplib)." +optional = false +python-versions = ">=3.6" +files = [ + {file = "amqp-5.1.1-py3-none-any.whl", hash = "sha256:6f0956d2c23d8fa6e7691934d8c3930eadb44972cbbd1a7ae3a520f735d43359"}, + {file = "amqp-5.1.1.tar.gz", hash = "sha256:2c1b13fecc0893e946c65cbd5f36427861cffa4ea2201d8f6fca22e2a373b5e2"}, +] + +[package.dependencies] +vine = ">=5.0.0" + +[[package]] +name = "anyio" +version = "4.0.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.0.0-py3-none-any.whl", hash = "sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f"}, + {file = "anyio-4.0.0.tar.gz", hash = "sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.22)"] + +[[package]] +name = "artifacts" +version = "20230928" +description = "ForensicArtifacts.com Artifact Repository." +optional = true +python-versions = "*" +files = [ + {file = "artifacts-20230928.tar.gz", hash = "sha256:b918f2977e5797e06e4df111351ba6b26d8b7446a0eb64eec6b2f3fa7df1cb8f"}, +] + +[package.dependencies] +pip = ">=7.0.0" +PyYAML = ">=3.10" + +[[package]] +name = "async-timeout" +version = "4.0.3" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, +] + +[[package]] +name = "azure-common" +version = "1.1.28" +description = "Microsoft Azure Client Library for Python (Common)" +optional = false +python-versions = "*" +files = [ + {file = "azure-common-1.1.28.zip", hash = "sha256:4ac0cd3214e36b6a1b6a442686722a5d8cc449603aa833f3f0f40bda836704a3"}, + {file = "azure_common-1.1.28-py2.py3-none-any.whl", hash = "sha256:5c12d3dcf4ec20599ca6b0d3e09e86e146353d443e7fcc050c9a19c1f9df20ad"}, +] + +[[package]] +name = "azure-core" +version = "1.29.4" +description = "Microsoft Azure Core Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "azure-core-1.29.4.tar.gz", hash = "sha256:500b3aa9bf2e90c5ccc88bb105d056114ca0ce7d0ce73afb8bc4d714b2fc7568"}, + {file = "azure_core-1.29.4-py3-none-any.whl", hash = "sha256:b03261bcba22c0b9290faf9999cedd23e849ed2577feee90515694cea6bc74bf"}, +] + +[package.dependencies] +requests = ">=2.18.4" +six = ">=1.11.0" +typing-extensions = ">=4.6.0" + +[package.extras] +aio = ["aiohttp (>=3.0)"] + +[[package]] +name = "azure-identity" +version = "1.14.1" +description = "Microsoft Azure Identity Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "azure-identity-1.14.1.zip", hash = "sha256:48e2a9dbdc59b4f095f841d867d9a8cbe4c1cdbbad8251e055561afd47b4a9b8"}, + {file = "azure_identity-1.14.1-py3-none-any.whl", hash = "sha256:3a5bef8e9c3281e864e869739be8d67424bff616cddae96b546ca2a5168d863d"}, +] + +[package.dependencies] +azure-core = ">=1.11.0,<2.0.0" +cryptography = ">=2.5" +msal = ">=1.20.0,<2.0.0" +msal-extensions = ">=0.3.0,<2.0.0" + +[[package]] +name = "azure-mgmt-compute" +version = "23.1.0" +description = "Microsoft Azure Compute Management Client Library for Python" +optional = false +python-versions = "*" +files = [ + {file = "azure-mgmt-compute-23.1.0.zip", hash = "sha256:49dbb0f51006d557cbd0b22999cb9ecf3eabc2be46d96efcc6d651c6b33754b3"}, + {file = "azure_mgmt_compute-23.1.0-py2.py3-none-any.whl", hash = "sha256:d028afc4fbbd6796b2604195ffdb1021ef77b18cf01356f810820a52a7e2a12d"}, +] + +[package.dependencies] +azure-common = ">=1.1,<2.0" +azure-mgmt-core = ">=1.2.0,<2.0.0" +msrest = ">=0.6.21" + +[[package]] +name = "azure-mgmt-core" +version = "1.4.0" +description = "Microsoft Azure Management Core Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "azure-mgmt-core-1.4.0.zip", hash = "sha256:d195208340094f98e5a6661b781cde6f6a051e79ce317caabd8ff97030a9b3ae"}, + {file = "azure_mgmt_core-1.4.0-py3-none-any.whl", hash = "sha256:81071675f186a585555ef01816f2774d49c1c9024cb76e5720c3c0f6b337bb7d"}, +] + +[package.dependencies] +azure-core = ">=1.26.2,<2.0.0" + +[[package]] +name = "azure-mgmt-monitor" +version = "6.0.2" +description = "Microsoft Azure Monitor Client Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "azure-mgmt-monitor-6.0.2.tar.gz", hash = "sha256:5ffbf500e499ab7912b1ba6d26cef26480d9ae411532019bb78d72562196e07b"}, + {file = "azure_mgmt_monitor-6.0.2-py3-none-any.whl", hash = "sha256:fe4cf41e6680b74a228f81451dc5522656d599c6f343ecf702fc790fda9a357b"}, +] + +[package.dependencies] +azure-common = ">=1.1,<2.0" +azure-mgmt-core = ">=1.3.2,<2.0.0" +isodate = ">=0.6.1,<1.0.0" + +[[package]] +name = "azure-mgmt-network" +version = "25.1.0" +description = "Microsoft Azure Network Management Client Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "azure-mgmt-network-25.1.0.tar.gz", hash = "sha256:f939f75bf139e03d2c457a4f07a5ebadb5affdd70aa54be9a0af44b8e52132fc"}, + {file = "azure_mgmt_network-25.1.0-py3-none-any.whl", hash = "sha256:94191ce8ae243ab6e9c489f21330b3908937e296d443fea4e5100d57d52e14c8"}, +] + +[package.dependencies] +azure-common = ">=1.1,<2.0" +azure-mgmt-core = ">=1.3.2,<2.0.0" +isodate = ">=0.6.1,<1.0.0" + +[[package]] +name = "azure-mgmt-resource" +version = "23.0.1" +description = "Microsoft Azure Resource Management Client Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "azure-mgmt-resource-23.0.1.zip", hash = "sha256:c2ba6cfd99df95f55f36eadc4245e3dc713257302a1fd0277756d94bd8cb28e0"}, + {file = "azure_mgmt_resource-23.0.1-py3-none-any.whl", hash = "sha256:f185eec72bbc39f42bcb83ae6f1bad744f0e3f20a12d9b2b3e70d16c74ad9cc0"}, +] + +[package.dependencies] +azure-common = ">=1.1,<2.0" +azure-mgmt-core = ">=1.3.2,<2.0.0" +isodate = ">=0.6.1,<1.0.0" + +[[package]] +name = "azure-mgmt-storage" +version = "21.1.0" +description = "Microsoft Azure Storage Management Client Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "azure-mgmt-storage-21.1.0.tar.gz", hash = "sha256:d6d3c0e917c988bc9ed0472477d3ef3f90886009eb1d97a711944f8375630162"}, + {file = "azure_mgmt_storage-21.1.0-py3-none-any.whl", hash = "sha256:593f2544fc4f05750c4fe7ca4d83c32ea1e9d266e57899bbf79ce5940124e8cc"}, +] + +[package.dependencies] +azure-common = ">=1.1,<2.0" +azure-mgmt-core = ">=1.3.2,<2.0.0" +isodate = ">=0.6.1,<1.0.0" + +[[package]] +name = "azure-storage-blob" +version = "12.18.3" +description = "Microsoft Azure Blob Storage Client Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "azure-storage-blob-12.18.3.tar.gz", hash = "sha256:d8ced0deee3367fa3d4f3d1a03cd9edadf4440c0a371f503d623fa6c807554ee"}, + {file = "azure_storage_blob-12.18.3-py3-none-any.whl", hash = "sha256:c278dde2ac41857a68d615c9f2b36d894ba877a7e84d62795603c7e79d0bb5e9"}, +] + +[package.dependencies] +azure-core = ">=1.28.0,<2.0.0" +cryptography = ">=2.1.4" +isodate = ">=0.6.1" +typing-extensions = ">=4.3.0" + +[package.extras] +aio = ["azure-core[aio] (>=1.28.0,<2.0.0)"] + +[[package]] +name = "bencode-py" +version = "4.0.0" +description = "Simple bencode parser (for Python 2, Python 3 and PyPy)" +optional = true +python-versions = "*" +files = [ + {file = "bencode.py-4.0.0-py2.py3-none-any.whl", hash = "sha256:99c06a55764e85ffe81622fdf9ee78bd737bad3ea61d119784a54bb28860d962"}, + {file = "bencode.py-4.0.0.tar.gz", hash = "sha256:2a24ccda1725a51a650893d0b63260138359eaa299bb6e7a09961350a2a6e05c"}, +] + +[[package]] +name = "billiard" +version = "4.1.0" +description = "Python multiprocessing fork with improvements and bugfixes" +optional = false +python-versions = ">=3.7" +files = [ + {file = "billiard-4.1.0-py3-none-any.whl", hash = "sha256:0f50d6be051c6b2b75bfbc8bfd85af195c5739c281d3f5b86a5640c65563614a"}, + {file = "billiard-4.1.0.tar.gz", hash = "sha256:1ad2eeae8e28053d729ba3373d34d9d6e210f6e4d8bf0a9c64f92bd053f1edf5"}, +] + +[[package]] +name = "boto3" +version = "1.28.65" +description = "The AWS SDK for Python" +optional = false +python-versions = ">= 3.7" +files = [ + {file = "boto3-1.28.65-py3-none-any.whl", hash = "sha256:ff3d0116e0ca6c096547652390025780eace3a28f6c04c9ffbf38448f1e5a87b"}, + {file = "boto3-1.28.65.tar.gz", hash = "sha256:9d52a1605657aeb5b19b09cfc01d9a92f88a616a5daf5479a59656d6341ea6b3"}, +] + +[package.dependencies] +botocore = ">=1.31.65,<1.32.0" +jmespath = ">=0.7.1,<2.0.0" +s3transfer = ">=0.7.0,<0.8.0" + +[package.extras] +crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] + +[[package]] +name = "botocore" +version = "1.31.65" +description = "Low-level, data-driven core of boto 3." +optional = false +python-versions = ">= 3.7" +files = [ + {file = "botocore-1.31.65-py3-none-any.whl", hash = "sha256:f74e3da98dfcec17bc63ef58f82c643bf5bd7ec6cc11a26ede21cc4cd064917f"}, + {file = "botocore-1.31.65.tar.gz", hash = "sha256:90716c6f1af97e5c2f516e9a3379767ebdddcc6cbed79b026fa5038ce4e5e43e"}, +] + +[package.dependencies] +jmespath = ">=0.7.1,<2.0.0" +python-dateutil = ">=2.1,<3.0.0" +urllib3 = {version = ">=1.25.4,<2.1", markers = "python_version >= \"3.10\""} + +[package.extras] +crt = ["awscrt (==0.16.26)"] + +[[package]] +name = "bottle" +version = "0.12.25" +description = "Fast and simple WSGI-framework for small web-applications." +optional = true +python-versions = "*" +files = [ + {file = "bottle-0.12.25-py3-none-any.whl", hash = "sha256:d6f15f9d422670b7c073d63bd8d287b135388da187a0f3e3c19293626ce034ea"}, + {file = "bottle-0.12.25.tar.gz", hash = "sha256:e1a9c94970ae6d710b3fb4526294dfeb86f2cb4a81eff3a4b98dc40fb0e5e021"}, +] + +[[package]] +name = "cachetools" +version = "5.3.1" +description = "Extensible memoizing collections and decorators" +optional = false +python-versions = ">=3.7" +files = [ + {file = "cachetools-5.3.1-py3-none-any.whl", hash = "sha256:95ef631eeaea14ba2e36f06437f36463aac3a096799e876ee55e5cdccb102590"}, + {file = "cachetools-5.3.1.tar.gz", hash = "sha256:dce83f2d9b4e1f732a8cd44af8e8fab2dbe46201467fc98b3ef8f269092bf62b"}, +] + +[[package]] +name = "celery" +version = "5.3.4" +description = "Distributed Task Queue." +optional = false +python-versions = ">=3.8" +files = [ + {file = "celery-5.3.4-py3-none-any.whl", hash = "sha256:1e6ed40af72695464ce98ca2c201ad0ef8fd192246f6c9eac8bba343b980ad34"}, + {file = "celery-5.3.4.tar.gz", hash = "sha256:9023df6a8962da79eb30c0c84d5f4863d9793a466354cc931d7f72423996de28"}, +] + +[package.dependencies] +billiard = ">=4.1.0,<5.0" +click = ">=8.1.2,<9.0" +click-didyoumean = ">=0.3.0" +click-plugins = ">=1.1.1" +click-repl = ">=0.2.0" +kombu = ">=5.3.2,<6.0" +python-dateutil = ">=2.8.2" +tzdata = ">=2022.7" +vine = ">=5.0.0,<6.0" + +[package.extras] +arangodb = ["pyArango (>=2.0.2)"] +auth = ["cryptography (==41.0.3)"] +azureblockblob = ["azure-storage-blob (>=12.15.0)"] +brotli = ["brotli (>=1.0.0)", "brotlipy (>=0.7.0)"] +cassandra = ["cassandra-driver (>=3.25.0,<4)"] +consul = ["python-consul2 (==0.1.5)"] +cosmosdbsql = ["pydocumentdb (==2.3.5)"] +couchbase = ["couchbase (>=3.0.0)"] +couchdb = ["pycouchdb (==1.14.2)"] +django = ["Django (>=2.2.28)"] +dynamodb = ["boto3 (>=1.26.143)"] +elasticsearch = ["elasticsearch (<8.0)"] +eventlet = ["eventlet (>=0.32.0)"] +gevent = ["gevent (>=1.5.0)"] +librabbitmq = ["librabbitmq (>=2.0.0)"] +memcache = ["pylibmc (==1.6.3)"] +mongodb = ["pymongo[srv] (>=4.0.2)"] +msgpack = ["msgpack (==1.0.5)"] +pymemcache = ["python-memcached (==1.59)"] +pyro = ["pyro4 (==4.82)"] +pytest = ["pytest-celery (==0.0.0)"] +redis = ["redis (>=4.5.2,!=4.5.5,<5.0.0)"] +s3 = ["boto3 (>=1.26.143)"] +slmq = ["softlayer-messaging (>=1.0.3)"] +solar = ["ephem (==4.1.4)"] +sqlalchemy = ["sqlalchemy (>=1.4.48,<2.1)"] +sqs = ["boto3 (>=1.26.143)", "kombu[sqs] (>=5.3.0)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] +tblib = ["tblib (>=1.3.0)", "tblib (>=1.5.0)"] +yaml = ["PyYAML (>=3.10)"] +zookeeper = ["kazoo (>=1.3.1)"] +zstd = ["zstandard (==0.21.0)"] + +[[package]] +name = "certifi" +version = "2023.7.22" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] + +[[package]] +name = "cffi" +version = "1.16.0" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "3.3.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.0.tar.gz", hash = "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win32.whl", hash = "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win32.whl", hash = "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win32.whl", hash = "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win32.whl", hash = "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win32.whl", hash = "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884"}, + {file = "charset_normalizer-3.3.0-py3-none-any.whl", hash = "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "click-didyoumean" +version = "0.3.0" +description = "Enables git-like *did-you-mean* feature in click" +optional = false +python-versions = ">=3.6.2,<4.0.0" +files = [ + {file = "click-didyoumean-0.3.0.tar.gz", hash = "sha256:f184f0d851d96b6d29297354ed981b7dd71df7ff500d82fa6d11f0856bee8035"}, + {file = "click_didyoumean-0.3.0-py3-none-any.whl", hash = "sha256:a0713dc7a1de3f06bc0df5a9567ad19ead2d3d5689b434768a6145bff77c0667"}, +] + +[package.dependencies] +click = ">=7" + +[[package]] +name = "click-plugins" +version = "1.1.1" +description = "An extension module for click to enable registering CLI commands via setuptools entry-points." +optional = false +python-versions = "*" +files = [ + {file = "click-plugins-1.1.1.tar.gz", hash = "sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b"}, + {file = "click_plugins-1.1.1-py2.py3-none-any.whl", hash = "sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8"}, +] + +[package.dependencies] +click = ">=4.0" + +[package.extras] +dev = ["coveralls", "pytest (>=3.6)", "pytest-cov", "wheel"] + +[[package]] +name = "click-repl" +version = "0.3.0" +description = "REPL plugin for Click" +optional = false +python-versions = ">=3.6" +files = [ + {file = "click-repl-0.3.0.tar.gz", hash = "sha256:17849c23dba3d667247dc4defe1757fff98694e90fe37474f3feebb69ced26a9"}, + {file = "click_repl-0.3.0-py3-none-any.whl", hash = "sha256:fb7e06deb8da8de86180a33a9da97ac316751c094c6899382da7feeeeb51b812"}, +] + +[package.dependencies] +click = ">=7.0" +prompt-toolkit = ">=3.0.36" + +[package.extras] +testing = ["pytest (>=7.2.1)", "pytest-cov (>=4.0.0)", "tox (>=4.4.3)"] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "colorlog" +version = "2.10.0" +description = "Log formatting with colors!" +optional = true +python-versions = "*" +files = [ + {file = "colorlog-2.10.0-py2.py3-none-any.whl", hash = "sha256:188a8f47b797fdf001891b5a55263789a2fda0ba7ba4c44f12741d0a8d5e9e03"}, + {file = "colorlog-2.10.0.tar.gz", hash = "sha256:229cd0794a19d8f33b2b4a4b70e1225b6c010af96c2dc8615279abbc1bb3929a"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} + +[[package]] +name = "coverage" +version = "7.3.2" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, + {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, + {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, + {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, + {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, + {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, + {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, + {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, + {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, + {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, + {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, + {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, + {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, + {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, +] + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "cryptography" +version = "41.0.4" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +optional = false +python-versions = ">=3.7" +files = [ + {file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839"}, + {file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13"}, + {file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143"}, + {file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397"}, + {file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860"}, + {file = "cryptography-41.0.4-cp37-abi3-win32.whl", hash = "sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd"}, + {file = "cryptography-41.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829"}, + {file = "cryptography-41.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9"}, + {file = "cryptography-41.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6"}, + {file = "cryptography-41.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311"}, + {file = "cryptography-41.0.4.tar.gz", hash = "sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a"}, +] + +[package.dependencies] +cffi = ">=1.12" + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] +nox = ["nox"] +pep8test = ["black", "check-sdist", "mypy", "ruff"] +sdist = ["build"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] + +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] + +[[package]] +name = "dfdatetime" +version = "20230506" +description = "Digital Forensics date and time (dfDateTime)." +optional = true +python-versions = "*" +files = [ + {file = "dfdatetime-20230506-py2.py3-none-any.whl", hash = "sha256:91441058c089de8822cf01d0a93acd5112a2d08ad7861ed3fe4cff1cd185ab79"}, + {file = "dfdatetime-20230506.tar.gz", hash = "sha256:ed8209d9555e055403dc9f938bbe2dbc804f269e3261d9d36dc683c24aaba146"}, +] + +[package.dependencies] +pip = ">=7.0.0" + +[[package]] +name = "dfdewey" +version = "20220603" +description = "dfDewey is a digital forensics string extraction, indexing, and searching tool." +optional = true +python-versions = ">=3.6" +files = [ + {file = "dfDewey-20220603-py3-none-any.whl", hash = "sha256:f515275563ddb63a2d478736f1e82f0bc09d86efe267ee8ed0bb958643bd75fe"}, + {file = "dfDewey-20220603.tar.gz", hash = "sha256:fd6036964c742f10c71617d9beb7545dd360c321ebc86e8d25aef14504bb194d"}, +] + +[package.dependencies] +opensearch-py = "*" +psycopg2-binary = "*" +six = "*" +tabulate = "*" + +[package.extras] +dev = ["coverage", "mock", "nose", "yapf"] + +[[package]] +name = "dfimagetools" +version = "20230806" +description = "Storage media image tools" +optional = true +python-versions = "*" +files = [ + {file = "dfimagetools-20230806.tar.gz", hash = "sha256:d6cc0c8f4788f9a33ecde160b372161834ee20e73d3ef99ae382c8b608dc44e2"}, +] + +[package.dependencies] +artifacts = ">=20220219" +cffi = ">=1.9.1" +cryptography = ">=2.0.2" +dfdatetime = ">=20221112" +dfvfs = ">=20220831" +dfwinreg = ">=20211207" +dtfabric = ">=20220219" +libbde-python = ">=20220121" +libcreg-python = ">=20200725" +libewf-python = ">=20131210" +libfsapfs-python = ">=20220709" +libfsext-python = ">=20220829" +libfsfat-python = ">=20220925" +libfshfs-python = ">=20220831" +libfsntfs-python = ">=20211229" +libfsxfs-python = ">=20220829" +libfvde-python = ">=20220121" +libfwnt-python = ">=20210717" +libluksde-python = ">=20220121" +libmodi-python = ">=20210405" +libphdi-python = ">=20220228" +libqcow-python = ">=20201213" +libregf-python = ">=20201002" +libsigscan-python = ">=20191221" +libsmdev-python = ">=20140529" +libsmraw-python = ">=20140612" +libvhdi-python = ">=20201014" +libvmdk-python = ">=20140421" +libvsapm-python = ">=20230506" +libvsgpt-python = ">=20211115" +libvshadow-python = ">=20160109" +libvslvm-python = ">=20160109" +pip = ">=7.0.0" +pytsk3 = ">=20210419" +pyxattr = {version = ">=0.7.2", markers = "platform_system != \"Windows\""} +PyYAML = ">=3.10" + +[[package]] +name = "dfvfs" +version = "20230531" +description = "Digital Forensics Virtual File System (dfVFS)." +optional = true +python-versions = "*" +files = [ + {file = "dfvfs-20230531-py2.py3-none-any.whl", hash = "sha256:4d1c89321689e2848b2cf0166d3771daeb7d70fc0b177c9d452887562deaa88e"}, + {file = "dfvfs-20230531.tar.gz", hash = "sha256:f2c71d781c0fe03b348ee93cc1f0c7da6c82e0038adb94b3c055b4ea647c428f"}, +] + +[package.dependencies] +cffi = ">=1.9.1" +cryptography = ">=2.0.2" +dfdatetime = ">=20221112" +dtfabric = ">=20220219" +libbde-python = ">=20220121" +libewf-python = ">=20131210" +libfsapfs-python = ">=20220709" +libfsext-python = ">=20220829" +libfsfat-python = ">=20220925" +libfshfs-python = ">=20220831" +libfsntfs-python = ">=20211229" +libfsxfs-python = ">=20220829" +libfvde-python = ">=20220121" +libfwnt-python = ">=20210717" +libluksde-python = ">=20220121" +libmodi-python = ">=20210405" +libphdi-python = ">=20220228" +libqcow-python = ">=20201213" +libsigscan-python = ">=20191221" +libsmdev-python = ">=20140529" +libsmraw-python = ">=20140612" +libvhdi-python = ">=20201014" +libvmdk-python = ">=20140421" +libvsapm-python = ">=20230506" +libvsgpt-python = ">=20211115" +libvshadow-python = ">=20160109" +libvslvm-python = ">=20160109" +pip = ">=7.0.0" +pytsk3 = ">=20210419" +pyxattr = {version = ">=0.7.2", markers = "platform_system != \"Windows\""} +PyYAML = ">=3.10" + +[[package]] +name = "dfwinreg" +version = "20221218" +description = "Digital Forensics Windows Registry (dfWinReg)." +optional = true +python-versions = "*" +files = [ + {file = "dfwinreg-20221218.tar.gz", hash = "sha256:a98e3dc115c6b8af3a944d76a49cf5ec0c5b2a0fa8003dac5d7cbc78b4b72d2d"}, +] + +[package.dependencies] +dfdatetime = ">=20160814" +dtfabric = ">=20170524" +libcreg-python = ">=20210502" +libregf-python = ">=20201002" +pip = ">=7.0.0" +PyYAML = ">=3.10" + +[[package]] +name = "dnspython" +version = "2.4.2" +description = "DNS toolkit" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "dnspython-2.4.2-py3-none-any.whl", hash = "sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8"}, + {file = "dnspython-2.4.2.tar.gz", hash = "sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984"}, +] + +[package.extras] +dnssec = ["cryptography (>=2.6,<42.0)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=0.17.3)", "httpx (>=0.24.1)"] +doq = ["aioquic (>=0.9.20)"] +idna = ["idna (>=2.1,<4.0)"] +trio = ["trio (>=0.14,<0.23)"] +wmi = ["wmi (>=1.5.1,<2.0.0)"] + +[[package]] +name = "docker" +version = "6.1.3" +description = "A Python library for the Docker Engine API." +optional = false +python-versions = ">=3.7" +files = [ + {file = "docker-6.1.3-py3-none-any.whl", hash = "sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9"}, + {file = "docker-6.1.3.tar.gz", hash = "sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20"}, +] + +[package.dependencies] +packaging = ">=14.0" +pywin32 = {version = ">=304", markers = "sys_platform == \"win32\""} +requests = ">=2.26.0" +urllib3 = ">=1.26.0" +websocket-client = ">=0.32.0" + +[package.extras] +ssh = ["paramiko (>=2.4.3)"] + +[[package]] +name = "dtfabric" +version = "20230520" +description = "Data type fabric (dtfabric)" +optional = true +python-versions = "*" +files = [ + {file = "dtfabric-20230520.tar.gz", hash = "sha256:ac93c111efde010ece3cf6477856e89a46fc71add64e178386cfe273a1a88553"}, +] + +[package.dependencies] +pip = ">=7.0.0" +PyYAML = ">=3.10" + +[[package]] +name = "ecdsa" +version = "0.18.0" +description = "ECDSA cryptographic signature library (pure python)" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "ecdsa-0.18.0-py2.py3-none-any.whl", hash = "sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd"}, + {file = "ecdsa-0.18.0.tar.gz", hash = "sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49"}, +] + +[package.dependencies] +six = ">=1.9.0" + +[package.extras] +gmpy = ["gmpy"] +gmpy2 = ["gmpy2"] + +[[package]] +name = "email-validator" +version = "2.0.0.post2" +description = "A robust email address syntax and deliverability validation library." +optional = false +python-versions = ">=3.7" +files = [ + {file = "email_validator-2.0.0.post2-py3-none-any.whl", hash = "sha256:2466ba57cda361fb7309fd3d5a225723c788ca4bbad32a0ebd5373b99730285c"}, + {file = "email_validator-2.0.0.post2.tar.gz", hash = "sha256:1ff6e86044200c56ae23595695c54e9614f4a9551e0e393614f764860b3d7900"}, +] + +[package.dependencies] +dnspython = ">=2.0.0" +idna = ">=2.0.0" + +[[package]] +name = "exceptiongroup" +version = "1.1.3" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "fakeredis" +version = "1.10.2" +description = "Fake implementation of redis API for testing purposes." +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "fakeredis-1.10.2-py3-none-any.whl", hash = "sha256:99916a280d76dd452ed168538bdbe871adcb2140316b5174db5718cb2fd47ad1"}, + {file = "fakeredis-1.10.2.tar.gz", hash = "sha256:001e36864eb9e19fce6414081245e7ae5c9a363a898fedc17911b1e680ba2d08"}, +] + +[package.dependencies] +redis = "<4.5" +sortedcontainers = ">=2.4.0,<3.0.0" + +[package.extras] +aioredis = ["aioredis (>=2.0.1,<3.0.0)"] +lua = ["lupa (>=1.13,<2.0)"] + +[[package]] +name = "fastapi" +version = "0.98.0" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.7" +files = [ + {file = "fastapi-0.98.0-py3-none-any.whl", hash = "sha256:f4165fb1fe3610c52cb1b8282c1480de9c34bc270f56a965aa93a884c350d605"}, + {file = "fastapi-0.98.0.tar.gz", hash = "sha256:0d3c18886f652038262b5898fec6b09f4ca92ee23e9d9b1d1d24e429f84bf27b"}, +] + +[package.dependencies] +email-validator = {version = ">=1.1.1", optional = true, markers = "extra == \"all\""} +httpx = {version = ">=0.23.0", optional = true, markers = "extra == \"all\""} +itsdangerous = {version = ">=1.1.0", optional = true, markers = "extra == \"all\""} +jinja2 = {version = ">=2.11.2", optional = true, markers = "extra == \"all\""} +orjson = {version = ">=3.2.1", optional = true, markers = "extra == \"all\""} +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0" +python-multipart = {version = ">=0.0.5", optional = true, markers = "extra == \"all\""} +pyyaml = {version = ">=5.3.1", optional = true, markers = "extra == \"all\""} +starlette = ">=0.27.0,<0.28.0" +ujson = {version = ">=4.0.1,<4.0.2 || >4.0.2,<4.1.0 || >4.1.0,<4.2.0 || >4.2.0,<4.3.0 || >4.3.0,<5.0.0 || >5.0.0,<5.1.0 || >5.1.0", optional = true, markers = "extra == \"all\""} +uvicorn = {version = ">=0.12.0", extras = ["standard"], optional = true, markers = "extra == \"all\""} + +[package.extras] +all = ["email-validator (>=1.1.1)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "filelock" +version = "3.12.4" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.12.4-py3-none-any.whl", hash = "sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4"}, + {file = "filelock-3.12.4.tar.gz", hash = "sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd"}, +] + +[package.extras] +docs = ["furo (>=2023.7.26)", "sphinx (>=7.1.2)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3)", "diff-cover (>=7.7)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "pytest-timeout (>=2.1)"] +typing = ["typing-extensions (>=4.7.1)"] + +[[package]] +name = "flor" +version = "1.1.3" +description = "Flor - An efficient Bloom filter implementation in Python" +optional = true +python-versions = "*" +files = [ + {file = "Flor-1.1.3-py3-none-any.whl", hash = "sha256:b332f6f78c9c99833c2d35012cee1cdb8ebb309fdc71d20fbc9f692479083f78"}, + {file = "Flor-1.1.3.tar.gz", hash = "sha256:1fac101e161446dbb2ee5379d5b950bb015fe6d90568385a549b538ca12fe942"}, +] + +[[package]] +name = "future" +version = "0.18.3" +description = "Clean single-source support for Python 3 and 2" +optional = true +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "future-0.18.3.tar.gz", hash = "sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307"}, +] + +[[package]] +name = "google-api-core" +version = "1.34.0" +description = "Google API client core library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-api-core-1.34.0.tar.gz", hash = "sha256:6fb380f49d19ee1d09a9722d0379042b7edb06c0112e4796c7a395078a043e71"}, + {file = "google_api_core-1.34.0-py3-none-any.whl", hash = "sha256:7421474c39d396a74dfa317dddbc69188f2336835f526087c7648f91105e32ff"}, +] + +[package.dependencies] +google-auth = ">=1.25.0,<3.0dev" +googleapis-common-protos = ">=1.56.2,<2.0dev" +grpcio = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""} +grpcio-status = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""} +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.0.0dev" +requests = ">=2.18.0,<3.0.0dev" + +[package.extras] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio-status (>=1.33.2,<2.0dev)"] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] + +[[package]] +name = "google-api-python-client" +version = "2.104.0" +description = "Google API Client Library for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-api-python-client-2.104.0.tar.gz", hash = "sha256:bbc66520e7fe9417b93fd113f2a0a1afa789d686de9009b6e94e48fdea50a60f"}, + {file = "google_api_python_client-2.104.0-py2.py3-none-any.whl", hash = "sha256:867061526aa6dc6c1481d118e913a8a38a02a01eed589413968397ebd77df71d"}, +] + +[package.dependencies] +google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0.dev0" +google-auth = ">=1.19.0,<3.0.0.dev0" +google-auth-httplib2 = ">=0.1.0" +httplib2 = ">=0.15.0,<1.dev0" +uritemplate = ">=3.0.1,<5" + +[[package]] +name = "google-auth" +version = "2.23.3" +description = "Google Authentication Library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-auth-2.23.3.tar.gz", hash = "sha256:6864247895eea5d13b9c57c9e03abb49cb94ce2dc7c58e91cba3248c7477c9e3"}, + {file = "google_auth-2.23.3-py2.py3-none-any.whl", hash = "sha256:a8f4608e65c244ead9e0538f181a96c6e11199ec114d41f1d7b1bffa96937bda"}, +] + +[package.dependencies] +cachetools = ">=2.0.0,<6.0" +pyasn1-modules = ">=0.2.1" +rsa = ">=3.1.4,<5" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] +enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] +pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +reauth = ["pyu2f (>=0.1.5)"] +requests = ["requests (>=2.20.0,<3.0.0.dev0)"] + +[[package]] +name = "google-auth-httplib2" +version = "0.1.1" +description = "Google Authentication Library: httplib2 transport" +optional = false +python-versions = "*" +files = [ + {file = "google-auth-httplib2-0.1.1.tar.gz", hash = "sha256:c64bc555fdc6dd788ea62ecf7bccffcf497bf77244887a3f3d7a5a02f8e3fc29"}, + {file = "google_auth_httplib2-0.1.1-py2.py3-none-any.whl", hash = "sha256:42c50900b8e4dcdf8222364d1f0efe32b8421fb6ed72f2613f12f75cc933478c"}, +] + +[package.dependencies] +google-auth = "*" +httplib2 = ">=0.19.0" + +[[package]] +name = "google-auth-oauthlib" +version = "1.1.0" +description = "Google Authentication Library" +optional = false +python-versions = ">=3.6" +files = [ + {file = "google-auth-oauthlib-1.1.0.tar.gz", hash = "sha256:83ea8c3b0881e453790baff4448e8a6112ac8778d1de9da0b68010b843937afb"}, + {file = "google_auth_oauthlib-1.1.0-py2.py3-none-any.whl", hash = "sha256:089c6e587d36f4803ac7e0720c045c6a8b1fd1790088b8424975b90d0ee61c12"}, +] + +[package.dependencies] +google-auth = ">=2.15.0" +requests-oauthlib = ">=0.7.0" + +[package.extras] +tool = ["click (>=6.0.0)"] + +[[package]] +name = "google-cloud-appengine-logging" +version = "1.3.2" +description = "Google Cloud Appengine Logging API client library" +optional = true +python-versions = ">=3.7" +files = [ + {file = "google-cloud-appengine-logging-1.3.2.tar.gz", hash = "sha256:a2989fca0e88463b56432aa821e64b81c3d171ee37b84771189b48e8b97cd496"}, + {file = "google_cloud_appengine_logging-1.3.2-py2.py3-none-any.whl", hash = "sha256:6ac6261567b56611f6891fa650f76db8a48d528762e5c2a09230b41d82ee2be0"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +proto-plus = [ + {version = ">=1.22.2,<2.0.0dev", markers = "python_version >= \"3.11\""}, + {version = ">=1.22.0,<2.0.0dev", markers = "python_version < \"3.11\""}, +] +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + +[[package]] +name = "google-cloud-audit-log" +version = "0.2.5" +description = "Google Cloud Audit Protos" +optional = true +python-versions = ">=3.7" +files = [ + {file = "google-cloud-audit-log-0.2.5.tar.gz", hash = "sha256:86e2faba3383adc8fd04a5bd7fd4f960b3e4aedaa7ed950f2f891ce16902eb6b"}, + {file = "google_cloud_audit_log-0.2.5-py2.py3-none-any.whl", hash = "sha256:18b94d4579002a450b7902cd2e8b8fdcb1ea2dd4df3b41f8f82be6d9f7fcd746"}, +] + +[package.dependencies] +googleapis-common-protos = ">=1.56.2,<2.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + +[[package]] +name = "google-cloud-core" +version = "1.5.0" +description = "Google Cloud API client core library" +optional = true +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" +files = [ + {file = "google-cloud-core-1.5.0.tar.gz", hash = "sha256:1277a015f8eeb014c48f2ec094ed5368358318f1146cf49e8de389962dc19106"}, + {file = "google_cloud_core-1.5.0-py2.py3-none-any.whl", hash = "sha256:99a8a15f406f53f2b11bda1f45f952a9cdfbdbba8abf40c75651019d800879f5"}, +] + +[package.dependencies] +google-api-core = ">=1.21.0,<2.0.0dev" +six = ">=1.12.0" + +[package.extras] +grpc = ["grpcio (>=1.8.2,<2.0dev)"] + +[[package]] +name = "google-cloud-datastore" +version = "2.0.0" +description = "Google Cloud Datastore API client library" +optional = true +python-versions = ">=3.6" +files = [ + {file = "google-cloud-datastore-2.0.0.tar.gz", hash = "sha256:dd83b82650b179cbbf010dd7bbb2fac871e1f5baea019f1bd080669b97c3bd8f"}, + {file = "google_cloud_datastore-2.0.0-py2.py3-none-any.whl", hash = "sha256:6873ff457d565ee373b56dab0fa564b3d89f89f36d0acba54cec809d643605bb"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.22.2,<2.0.0dev", extras = ["grpc"]} +google-cloud-core = ">=1.4.0,<2.0dev" +libcst = ">=0.2.5" +proto-plus = ">=1.4.0" + +[[package]] +name = "google-cloud-error-reporting" +version = "1.9.2" +description = "Google Cloud Error Reporting API client library" +optional = true +python-versions = ">=3.7" +files = [ + {file = "google-cloud-error-reporting-1.9.2.tar.gz", hash = "sha256:4beef1ea02312437d5ed77ba0ce0556c934c4446254452f21a8f0112921d228c"}, + {file = "google_cloud_error_reporting-1.9.2-py2.py3-none-any.whl", hash = "sha256:efd7d9011c58113e68bb17da5ce532c309b444b30694caecd0f5be2420fe5c66"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.34.0,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]} +google-cloud-logging = ">=1.14.0,<4.0.0dev" +proto-plus = [ + {version = ">=1.22.2,<2.0.0dev", markers = "python_version >= \"3.11\""}, + {version = ">=1.22.0,<2.0.0dev", markers = "python_version < \"3.11\""}, +] +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + +[[package]] +name = "google-cloud-logging" +version = "2.7.2" +description = "Stackdriver Logging API client library" +optional = true +python-versions = ">=3.6" +files = [ + {file = "google-cloud-logging-2.7.2.tar.gz", hash = "sha256:a35707c44afb940fa6a1a07ba20014a0417257ff64a477e7d44abcb86b5b86a2"}, + {file = "google_cloud_logging-2.7.2-py2.py3-none-any.whl", hash = "sha256:1ecc36a5a232b5561ac067023ad27bdea83f40cada4190e141a8bb802644bd0a"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0dev", extras = ["grpc"]} +google-cloud-appengine-logging = ">=0.1.0,<2.0.0dev" +google-cloud-audit-log = ">=0.1.0,<1.0.0dev" +google-cloud-core = ">=1.4.1,<3.0.0dev" +grpc-google-iam-v1 = ">=0.12.3,<0.13dev" +proto-plus = ">=1.15.0,<2.0.0dev" +protobuf = "<4.0.0dev" + +[[package]] +name = "google-cloud-pubsub" +version = "1.7.0" +description = "Google Cloud Pub/Sub API client library" +optional = true +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" +files = [ + {file = "google-cloud-pubsub-1.7.0.tar.gz", hash = "sha256:c8d098ebd208d00c8f3bb55eefecd8553e7391d59700426a97d35125f0dcb248"}, + {file = "google_cloud_pubsub-1.7.0-py2.py3-none-any.whl", hash = "sha256:b7f577621f991b513034c50f3314ef66838701b3b0dd1fca0d5e9a0e82f9f801"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.14.0,<1.17.dev0 || >=1.20.dev0", extras = ["grpc"]} +grpc-google-iam-v1 = ">=0.12.3,<0.13dev" + +[[package]] +name = "google-cloud-storage" +version = "1.23.0" +description = "Google Cloud Storage API client library" +optional = true +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +files = [ + {file = "google-cloud-storage-1.23.0.tar.gz", hash = "sha256:c66e876ae9547884fa42566a2ebfec51d280f488d7a058af9611ba90c78bed78"}, + {file = "google_cloud_storage-1.23.0-py2.py3-none-any.whl", hash = "sha256:9f59c100d3940e38567c48d54cf1a2e7591a2f38e9693dfc11a242d5e54a1626"}, +] + +[package.dependencies] +google-auth = ">=1.2.0" +google-cloud-core = ">=1.0.3,<2.0dev" +google-resumable-media = ">=0.5.0,<0.6dev" + +[[package]] +name = "google-resumable-media" +version = "0.5.1" +description = "Utilities for Google Media Downloads and Resumable Uploads" +optional = true +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" +files = [ + {file = "google-resumable-media-0.5.1.tar.gz", hash = "sha256:97155236971970382b738921f978a6f86a7b5a0b0311703d991e065d3cb55773"}, + {file = "google_resumable_media-0.5.1-py2.py3-none-any.whl", hash = "sha256:cdc64378dc9a7a7bf963a8d0c944c99b549dc0c195a9acbf1fcd465f380b9002"}, +] + +[package.dependencies] +six = "*" + +[package.extras] +requests = ["requests (>=2.18.0,<3.0.0dev)"] + +[[package]] +name = "googleapis-common-protos" +version = "1.61.0" +description = "Common protobufs used in Google APIs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "googleapis-common-protos-1.61.0.tar.gz", hash = "sha256:8a64866a97f6304a7179873a465d6eee97b7a24ec6cfd78e0f575e96b821240b"}, + {file = "googleapis_common_protos-1.61.0-py2.py3-none-any.whl", hash = "sha256:22f1915393bb3245343f6efe87f6fe868532efc12aa26b391b15132e1279f1c0"}, +] + +[package.dependencies] +grpcio = {version = ">=1.44.0,<2.0.0.dev0", optional = true, markers = "extra == \"grpc\""} +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" + +[package.extras] +grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] + +[[package]] +name = "grpc-google-iam-v1" +version = "0.12.6" +description = "IAM API client library" +optional = true +python-versions = ">=3.7" +files = [ + {file = "grpc-google-iam-v1-0.12.6.tar.gz", hash = "sha256:2bc4b8fdf22115a65d751c9317329322602c39b7c86a289c9b72d228d960ef5f"}, + {file = "grpc_google_iam_v1-0.12.6-py2.py3-none-any.whl", hash = "sha256:5c10f3d8dc2d88678ab1a9b0cb5482735c5efee71e6c0cd59f872eef22913f5c"}, +] + +[package.dependencies] +googleapis-common-protos = {version = ">=1.56.0,<2.0.0dev", extras = ["grpc"]} +grpcio = ">=1.44.0,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + +[[package]] +name = "grpcio" +version = "1.59.0" +description = "HTTP/2-based RPC framework" +optional = true +python-versions = ">=3.7" +files = [ + {file = "grpcio-1.59.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:225e5fa61c35eeaebb4e7491cd2d768cd8eb6ed00f2664fa83a58f29418b39fd"}, + {file = "grpcio-1.59.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:b95ec8ecc4f703f5caaa8d96e93e40c7f589bad299a2617bdb8becbcce525539"}, + {file = "grpcio-1.59.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:1a839ba86764cc48226f50b924216000c79779c563a301586a107bda9cbe9dcf"}, + {file = "grpcio-1.59.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6cfe44a5d7c7d5f1017a7da1c8160304091ca5dc64a0f85bca0d63008c3137a"}, + {file = "grpcio-1.59.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0fcf53df684fcc0154b1e61f6b4a8c4cf5f49d98a63511e3f30966feff39cd0"}, + {file = "grpcio-1.59.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa66cac32861500f280bb60fe7d5b3e22d68c51e18e65367e38f8669b78cea3b"}, + {file = "grpcio-1.59.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8cd2d38c2d52f607d75a74143113174c36d8a416d9472415eab834f837580cf7"}, + {file = "grpcio-1.59.0-cp310-cp310-win32.whl", hash = "sha256:228b91ce454876d7eed74041aff24a8f04c0306b7250a2da99d35dd25e2a1211"}, + {file = "grpcio-1.59.0-cp310-cp310-win_amd64.whl", hash = "sha256:ca87ee6183421b7cea3544190061f6c1c3dfc959e0b57a5286b108511fd34ff4"}, + {file = "grpcio-1.59.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:c173a87d622ea074ce79be33b952f0b424fa92182063c3bda8625c11d3585d09"}, + {file = "grpcio-1.59.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:ec78aebb9b6771d6a1de7b6ca2f779a2f6113b9108d486e904bde323d51f5589"}, + {file = "grpcio-1.59.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:0b84445fa94d59e6806c10266b977f92fa997db3585f125d6b751af02ff8b9fe"}, + {file = "grpcio-1.59.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c251d22de8f9f5cca9ee47e4bade7c5c853e6e40743f47f5cc02288ee7a87252"}, + {file = "grpcio-1.59.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:956f0b7cb465a65de1bd90d5a7475b4dc55089b25042fe0f6c870707e9aabb1d"}, + {file = "grpcio-1.59.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:38da5310ef84e16d638ad89550b5b9424df508fd5c7b968b90eb9629ca9be4b9"}, + {file = "grpcio-1.59.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:63982150a7d598281fa1d7ffead6096e543ff8be189d3235dd2b5604f2c553e5"}, + {file = "grpcio-1.59.0-cp311-cp311-win32.whl", hash = "sha256:50eff97397e29eeee5df106ea1afce3ee134d567aa2c8e04fabab05c79d791a7"}, + {file = "grpcio-1.59.0-cp311-cp311-win_amd64.whl", hash = "sha256:15f03bd714f987d48ae57fe092cf81960ae36da4e520e729392a59a75cda4f29"}, + {file = "grpcio-1.59.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:f1feb034321ae2f718172d86b8276c03599846dc7bb1792ae370af02718f91c5"}, + {file = "grpcio-1.59.0-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:d09bd2a4e9f5a44d36bb8684f284835c14d30c22d8ec92ce796655af12163588"}, + {file = "grpcio-1.59.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:2f120d27051e4c59db2f267b71b833796770d3ea36ca712befa8c5fff5da6ebd"}, + {file = "grpcio-1.59.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba0ca727a173ee093f49ead932c051af463258b4b493b956a2c099696f38aa66"}, + {file = "grpcio-1.59.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5711c51e204dc52065f4a3327dca46e69636a0b76d3e98c2c28c4ccef9b04c52"}, + {file = "grpcio-1.59.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:d74f7d2d7c242a6af9d4d069552ec3669965b74fed6b92946e0e13b4168374f9"}, + {file = "grpcio-1.59.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3859917de234a0a2a52132489c4425a73669de9c458b01c9a83687f1f31b5b10"}, + {file = "grpcio-1.59.0-cp312-cp312-win32.whl", hash = "sha256:de2599985b7c1b4ce7526e15c969d66b93687571aa008ca749d6235d056b7205"}, + {file = "grpcio-1.59.0-cp312-cp312-win_amd64.whl", hash = "sha256:598f3530231cf10ae03f4ab92d48c3be1fee0c52213a1d5958df1a90957e6a88"}, + {file = "grpcio-1.59.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:b34c7a4c31841a2ea27246a05eed8a80c319bfc0d3e644412ec9ce437105ff6c"}, + {file = "grpcio-1.59.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:c4dfdb49f4997dc664f30116af2d34751b91aa031f8c8ee251ce4dcfc11277b0"}, + {file = "grpcio-1.59.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:61bc72a00ecc2b79d9695220b4d02e8ba53b702b42411397e831c9b0589f08a3"}, + {file = "grpcio-1.59.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f367e4b524cb319e50acbdea57bb63c3b717c5d561974ace0b065a648bb3bad3"}, + {file = "grpcio-1.59.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:849c47ef42424c86af069a9c5e691a765e304079755d5c29eff511263fad9c2a"}, + {file = "grpcio-1.59.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c0488c2b0528e6072010182075615620071371701733c63ab5be49140ed8f7f0"}, + {file = "grpcio-1.59.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:611d9aa0017fa386809bddcb76653a5ab18c264faf4d9ff35cb904d44745f575"}, + {file = "grpcio-1.59.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e5378785dce2b91eb2e5b857ec7602305a3b5cf78311767146464bfa365fc897"}, + {file = "grpcio-1.59.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:fe976910de34d21057bcb53b2c5e667843588b48bf11339da2a75f5c4c5b4055"}, + {file = "grpcio-1.59.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:c041a91712bf23b2a910f61e16565a05869e505dc5a5c025d429ca6de5de842c"}, + {file = "grpcio-1.59.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:0ae444221b2c16d8211b55326f8ba173ba8f8c76349bfc1768198ba592b58f74"}, + {file = "grpcio-1.59.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ceb1e68135788c3fce2211de86a7597591f0b9a0d2bb80e8401fd1d915991bac"}, + {file = "grpcio-1.59.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c4b1cc3a9dc1924d2eb26eec8792fedd4b3fcd10111e26c1d551f2e4eda79ce"}, + {file = "grpcio-1.59.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:871371ce0c0055d3db2a86fdebd1e1d647cf21a8912acc30052660297a5a6901"}, + {file = "grpcio-1.59.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:93e9cb546e610829e462147ce724a9cb108e61647a3454500438a6deef610be1"}, + {file = "grpcio-1.59.0-cp38-cp38-win32.whl", hash = "sha256:f21917aa50b40842b51aff2de6ebf9e2f6af3fe0971c31960ad6a3a2b24988f4"}, + {file = "grpcio-1.59.0-cp38-cp38-win_amd64.whl", hash = "sha256:14890da86a0c0e9dc1ea8e90101d7a3e0e7b1e71f4487fab36e2bfd2ecadd13c"}, + {file = "grpcio-1.59.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:34341d9e81a4b669a5f5dca3b2a760b6798e95cdda2b173e65d29d0b16692857"}, + {file = "grpcio-1.59.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:986de4aa75646e963466b386a8c5055c8b23a26a36a6c99052385d6fe8aaf180"}, + {file = "grpcio-1.59.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:aca8a24fef80bef73f83eb8153f5f5a0134d9539b4c436a716256b311dda90a6"}, + {file = "grpcio-1.59.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:936b2e04663660c600d5173bc2cc84e15adbad9c8f71946eb833b0afc205b996"}, + {file = "grpcio-1.59.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc8bf2e7bc725e76c0c11e474634a08c8f24bcf7426c0c6d60c8f9c6e70e4d4a"}, + {file = "grpcio-1.59.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81d86a096ccd24a57fa5772a544c9e566218bc4de49e8c909882dae9d73392df"}, + {file = "grpcio-1.59.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2ea95cd6abbe20138b8df965b4a8674ec312aaef3147c0f46a0bac661f09e8d0"}, + {file = "grpcio-1.59.0-cp39-cp39-win32.whl", hash = "sha256:3b8ff795d35a93d1df6531f31c1502673d1cebeeba93d0f9bd74617381507e3f"}, + {file = "grpcio-1.59.0-cp39-cp39-win_amd64.whl", hash = "sha256:38823bd088c69f59966f594d087d3a929d1ef310506bee9e3648317660d65b81"}, + {file = "grpcio-1.59.0.tar.gz", hash = "sha256:acf70a63cf09dd494000007b798aff88a436e1c03b394995ce450be437b8e54f"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.59.0)"] + +[[package]] +name = "grpcio-status" +version = "1.48.2" +description = "Status proto mapping for gRPC" +optional = true +python-versions = ">=3.6" +files = [ + {file = "grpcio-status-1.48.2.tar.gz", hash = "sha256:53695f45da07437b7c344ee4ef60d370fd2850179f5a28bb26d8e2aa1102ec11"}, + {file = "grpcio_status-1.48.2-py3-none-any.whl", hash = "sha256:2c33bbdbe20188b2953f46f31af669263b6ee2a9b2d38fa0d36ee091532e21bf"}, +] + +[package.dependencies] +googleapis-common-protos = ">=1.5.5" +grpcio = ">=1.48.2" +protobuf = ">=3.12.0" + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "httpcore" +version = "0.18.0" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpcore-0.18.0-py3-none-any.whl", hash = "sha256:adc5398ee0a476567bf87467063ee63584a8bce86078bf748e48754f60202ced"}, + {file = "httpcore-0.18.0.tar.gz", hash = "sha256:13b5e5cd1dca1a6636a6aaea212b19f4f85cd88c366a2b82304181b769aab3c9"}, +] + +[package.dependencies] +anyio = ">=3.0,<5.0" +certifi = "*" +h11 = ">=0.13,<0.15" +sniffio = "==1.*" + +[package.extras] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] + +[[package]] +name = "httplib2" +version = "0.22.0" +description = "A comprehensive HTTP client library." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "httplib2-0.22.0-py3-none-any.whl", hash = "sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc"}, + {file = "httplib2-0.22.0.tar.gz", hash = "sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81"}, +] + +[package.dependencies] +pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0.2,<3.0.3 || >3.0.3,<4", markers = "python_version > \"3.0\""} + +[[package]] +name = "httptools" +version = "0.6.1" +description = "A collection of framework independent HTTP protocol utils." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"}, + {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58"}, + {file = "httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142"}, + {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658"}, + {file = "httptools-0.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1"}, + {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc"}, + {file = "httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837"}, + {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d"}, + {file = "httptools-0.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0"}, + {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90"}, + {file = "httptools-0.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84"}, + {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb"}, + {file = "httptools-0.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3"}, + {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97"}, + {file = "httptools-0.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4"}, + {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf"}, + {file = "httptools-0.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3"}, + {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d"}, + {file = "httptools-0.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81"}, + {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a"}, + {file = "httptools-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e"}, + {file = "httptools-0.6.1.tar.gz", hash = "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a"}, +] + +[package.extras] +test = ["Cython (>=0.29.24,<0.30.0)"] + +[[package]] +name = "httpx" +version = "0.25.0" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-0.25.0-py3-none-any.whl", hash = "sha256:181ea7f8ba3a82578be86ef4171554dd45fec26a02556a744db029a0a27b7100"}, + {file = "httpx-0.25.0.tar.gz", hash = "sha256:47ecda285389cb32bb2691cc6e069e3ab0205956f681c5b2ad2325719751d875"}, +] + +[package.dependencies] +certifi = "*" +httpcore = ">=0.18.0,<0.19.0" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "importlib-metadata" +version = "6.8.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, + {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, +] + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "isodate" +version = "0.6.1" +description = "An ISO 8601 date/time/duration parser and formatter" +optional = false +python-versions = "*" +files = [ + {file = "isodate-0.6.1-py2.py3-none-any.whl", hash = "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96"}, + {file = "isodate-0.6.1.tar.gz", hash = "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "itsdangerous" +version = "2.1.2" +description = "Safely pass data to untrusted environments and back." +optional = false +python-versions = ">=3.7" +files = [ + {file = "itsdangerous-2.1.2-py3-none-any.whl", hash = "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"}, + {file = "itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"}, +] + +[[package]] +name = "jaraco-classes" +version = "3.3.0" +description = "Utility functions for Python class constructs" +optional = true +python-versions = ">=3.8" +files = [ + {file = "jaraco.classes-3.3.0-py3-none-any.whl", hash = "sha256:10afa92b6743f25c0cf5f37c6bb6e18e2c5bb84a16527ccfc0040ea377e7aaeb"}, + {file = "jaraco.classes-3.3.0.tar.gz", hash = "sha256:c063dd08e89217cee02c8d5e5ec560f2c8ce6cdc2fcdc2e68f7b2e5547ed3621"}, +] + +[package.dependencies] +more-itertools = "*" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[[package]] +name = "jeepney" +version = "0.8.0" +description = "Low-level, pure Python DBus protocol wrapper." +optional = true +python-versions = ">=3.7" +files = [ + {file = "jeepney-0.8.0-py3-none-any.whl", hash = "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"}, + {file = "jeepney-0.8.0.tar.gz", hash = "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806"}, +] + +[package.extras] +test = ["async-timeout", "pytest", "pytest-asyncio (>=0.17)", "pytest-trio", "testpath", "trio"] +trio = ["async_generator", "trio"] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "jmespath" +version = "1.0.1" +description = "JSON Matching Expressions" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, + {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, +] + +[[package]] +name = "keyring" +version = "24.2.0" +description = "Store and access your passwords safely." +optional = true +python-versions = ">=3.8" +files = [ + {file = "keyring-24.2.0-py3-none-any.whl", hash = "sha256:4901caaf597bfd3bbd78c9a0c7c4c29fcd8310dab2cffefe749e916b6527acd6"}, + {file = "keyring-24.2.0.tar.gz", hash = "sha256:ca0746a19ec421219f4d713f848fa297a661a8a8c1504867e55bfb5e09091509"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.11.4", markers = "python_version < \"3.12\""} +"jaraco.classes" = "*" +jeepney = {version = ">=0.4.2", markers = "sys_platform == \"linux\""} +pywin32-ctypes = {version = ">=0.2.0", markers = "sys_platform == \"win32\""} +SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} + +[package.extras] +completion = ["shtab"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[[package]] +name = "kombu" +version = "5.3.2" +description = "Messaging library for Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "kombu-5.3.2-py3-none-any.whl", hash = "sha256:b753c9cfc9b1e976e637a7cbc1a65d446a22e45546cd996ea28f932082b7dc9e"}, + {file = "kombu-5.3.2.tar.gz", hash = "sha256:0ba213f630a2cb2772728aef56ac6883dc3a2f13435e10048f6e97d48506dbbd"}, +] + +[package.dependencies] +amqp = ">=5.1.1,<6.0.0" +vine = "*" + +[package.extras] +azureservicebus = ["azure-servicebus (>=7.10.0)"] +azurestoragequeues = ["azure-identity (>=1.12.0)", "azure-storage-queue (>=12.6.0)"] +confluentkafka = ["confluent-kafka (==2.1.1)"] +consul = ["python-consul2"] +librabbitmq = ["librabbitmq (>=2.0.0)"] +mongodb = ["pymongo (>=4.1.1)"] +msgpack = ["msgpack"] +pyro = ["pyro4"] +qpid = ["qpid-python (>=0.26)", "qpid-tools (>=0.26)"] +redis = ["redis (>=4.5.2)"] +slmq = ["softlayer-messaging (>=1.0.3)"] +sqlalchemy = ["sqlalchemy (>=1.4.48,<2.1)"] +sqs = ["boto3 (>=1.26.143)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] +yaml = ["PyYAML (>=3.10)"] +zookeeper = ["kazoo (>=2.8.0)"] + +[[package]] +name = "kubernetes" +version = "28.1.0" +description = "Kubernetes python client" +optional = false +python-versions = ">=3.6" +files = [ + {file = "kubernetes-28.1.0-py2.py3-none-any.whl", hash = "sha256:10f56f8160dcb73647f15fafda268e7f60cf7dbc9f8e46d52fcd46d3beb0c18d"}, + {file = "kubernetes-28.1.0.tar.gz", hash = "sha256:1468069a573430fb1cb5ad22876868f57977930f80a6749405da31cd6086a7e9"}, +] + +[package.dependencies] +certifi = ">=14.05.14" +google-auth = ">=1.0.1" +oauthlib = ">=3.2.2" +python-dateutil = ">=2.5.3" +pyyaml = ">=5.4.1" +requests = "*" +requests-oauthlib = "*" +six = ">=1.9.0" +urllib3 = ">=1.24.2,<2.0" +websocket-client = ">=0.32.0,<0.40.0 || >0.40.0,<0.41.dev0 || >=0.43.dev0" + +[package.extras] +adal = ["adal (>=1.0.2)"] + +[[package]] +name = "libbde-python" +version = "20221031" +description = "Python bindings module for libbde" +optional = true +python-versions = "*" +files = [ + {file = "libbde-python-20221031.tar.gz", hash = "sha256:eb69fd1206dda243269a1dca42714975564b55a458736011c93c11275d233b30"}, + {file = "libbde_python-20221031-cp27-cp27m-win32.whl", hash = "sha256:8ff19fd92258909a0ffe46680231c02f8fa57b5b0704d4a52482c606f136bc39"}, + {file = "libbde_python-20221031-cp27-cp27m-win_amd64.whl", hash = "sha256:0aa359362986805998caa06b95bf9d8f5818734b2de3014a5eb49f1b5976ed88"}, + {file = "libbde_python-20221031-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:0497a6c77f18f8d14bbd1a54ebd051122599fdb56fad83586b4fbeb0af6f1ec0"}, + {file = "libbde_python-20221031-cp310-cp310-win32.whl", hash = "sha256:aa422589bcc160816cdfa82d987385103f31eb029c40bff5cb43477334acdf19"}, + {file = "libbde_python-20221031-cp310-cp310-win_amd64.whl", hash = "sha256:b86a5f2f1ac1d6985f9cd6f88b1ce98ee4e531ef045a604e4eb78540621eb846"}, +] + +[[package]] +name = "libcaes-python" +version = "20230406" +description = "Python bindings module for libcaes" +optional = true +python-versions = "*" +files = [ + {file = "libcaes-python-20230406.tar.gz", hash = "sha256:c7274a61beee066f079c7dbec9df92a3483ebeccd27e84cdb6f2cdb6928e00da"}, + {file = "libcaes_python-20230406-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:d16384b3e804fbfe50e8fab4e246480b8bc39857f244c8e908fe923df715f7c5"}, + {file = "libcaes_python-20230406-cp310-cp310-win32.whl", hash = "sha256:95da6adaef80aba6ac0ac8db5011f0ff1f86dc76d009dfe259a2dfed63811f4b"}, + {file = "libcaes_python-20230406-cp310-cp310-win_amd64.whl", hash = "sha256:cfd75c493417df570f1cc6da1fc00fd4dc82bdc359b1c82abbb488d3bff8b3e6"}, + {file = "libcaes_python-20230406-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:1aeded8ffc3920baf8e4f490c4ac8a3b2a09aafcc116e5b1baea32e45459d6e7"}, + {file = "libcaes_python-20230406-cp37-cp37m-macosx_12_0_x86_64.whl", hash = "sha256:4c7c7ef0e3370f60dfa28c4684c269752bce05b5afcb730c93de29b6b8bdeb2c"}, + {file = "libcaes_python-20230406-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:5b3f47ffca3682d2e078ad63be90555a653659da39232d2c914a2726135cbc21"}, + {file = "libcaes_python-20230406-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:ae8563024aa89c3ac3c02f33a7bd8876b6504aa943fc31c8ff66fa291e028d88"}, +] + +[[package]] +name = "libcloudforensics" +version = "20230601" +description = "libcloudforensics is a set of tools to help acquire forensic evidence from cloud platforms." +optional = false +python-versions = "*" +files = [ + {file = "libcloudforensics-20230601-py3-none-any.whl", hash = "sha256:2a6dc01767ce52d341f41759b4d3455d8741bca5afa2535e7a10c561a167a23c"}, + {file = "libcloudforensics-20230601.tar.gz", hash = "sha256:66bbac27fed58255f3b593695db2b140769c2e2845c359b1d7c02f8fd82be475"}, +] + +[package.dependencies] +azure-common = "*" +azure-core = "*" +azure-identity = "*" +azure-mgmt-compute = "23.1.0" +azure-mgmt-monitor = "*" +azure-mgmt-network = "*" +azure-mgmt-resource = "23.0.1" +azure-mgmt-storage = "*" +azure-storage-blob = "*" +boto3 = ">=1.26.135" +botocore = ">=1.29.135" +google-api-core = "*" +google-api-python-client = "*" +httplib2 = "*" +kubernetes = "*" +msrest = "*" +msrestazure = "*" +netaddr = "*" +pycryptodome = "*" +PyJWT = "*" +pyopenssl = "*" +requests = "*" +sshpubkeys = "*" +urllib3 = ">=1.21.1,<1.27" + +[[package]] +name = "libcreg-python" +version = "20230930" +description = "Python bindings module for libcreg" +optional = true +python-versions = ">=3.7" +files = [ + {file = "libcreg-python-20230930.tar.gz", hash = "sha256:3d80b6f2e3463906f4f3ce01a154865efdd162719be8710ababb55eb743f0972"}, + {file = "libcreg_python-20230930-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:467739605bac96bf42a14155d0686068aa5d9da81ad016c7a155e7d76374deff"}, + {file = "libcreg_python-20230930-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:aa04b1869c73a5038542f973c0b71d3ae0d75123005d354a775a539f4d4b0042"}, + {file = "libcreg_python-20230930-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:266a14777c99d7bc623ea501b00f84c132fde9641d054f4a51542b7446b62ea9"}, + {file = "libcreg_python-20230930-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:2b78f1a5ad6529fef57391d0bc8a39aa57bfdcfb859d4fa0792b24038376a0bc"}, +] + +[[package]] +name = "libcst" +version = "1.1.0" +description = "A concrete syntax tree with AST-like properties for Python 3.5, 3.6, 3.7, 3.8, 3.9, and 3.10 programs." +optional = true +python-versions = ">=3.8" +files = [ + {file = "libcst-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:63f75656fd733dc20354c46253fde3cf155613e37643c3eaf6f8818e95b7a3d1"}, + {file = "libcst-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8ae11eb1ea55a16dc0cdc61b41b29ac347da70fec14cc4381248e141ee2fbe6c"}, + {file = "libcst-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bc745d0c06420fe2644c28d6ddccea9474fb68a2135904043676deb4fa1e6bc"}, + {file = "libcst-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c1f2da45f1c45634090fd8672c15e0159fdc46853336686959b2d093b6e10fa"}, + {file = "libcst-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:003e5e83a12eed23542c4ea20fdc8de830887cc03662432bb36f84f8c4841b81"}, + {file = "libcst-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:3ebbb9732ae3cc4ae7a0e97890bed0a57c11d6df28790c2b9c869f7da653c7c7"}, + {file = "libcst-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d68c34e3038d3d1d6324eb47744cbf13f2c65e1214cf49db6ff2a6603c1cd838"}, + {file = "libcst-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9dffa1795c2804d183efb01c0f1efd20a7831db6a21a0311edf90b4100d67436"}, + {file = "libcst-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc9b6ac36d7ec9db2f053014ea488086ca2ed9c322be104fbe2c71ca759da4bb"}, + {file = "libcst-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b7a38ec4c1c009ac39027d51558b52851fb9234669ba5ba62283185963a31c"}, + {file = "libcst-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5297a16e575be8173185e936b7765c89a3ca69d4ae217a4af161814a0f9745a7"}, + {file = "libcst-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:7ccaf53925f81118aeaadb068a911fac8abaff608817d7343da280616a5ca9c1"}, + {file = "libcst-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:75816647736f7e09c6120bdbf408456f99b248d6272277eed9a58cf50fb8bc7d"}, + {file = "libcst-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c8f26250f87ca849a7303ed7a4fd6b2c7ac4dec16b7d7e68ca6a476d7c9bfcdb"}, + {file = "libcst-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d37326bd6f379c64190a28947a586b949de3a76be00176b0732c8ee87d67ebe"}, + {file = "libcst-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3d8cf974cfa2487b28f23f56c4bff90d550ef16505e58b0dca0493d5293784b"}, + {file = "libcst-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82d1271403509b0a4ee6ff7917c2d33b5a015f44d1e208abb1da06ba93b2a378"}, + {file = "libcst-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:bca1841693941fdd18371824bb19a9702d5784cd347cb8231317dbdc7062c5bc"}, + {file = "libcst-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f36f592e035ef84f312a12b75989dde6a5f6767fe99146cdae6a9ee9aff40dd0"}, + {file = "libcst-1.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f561c9a84eca18be92f4ad90aa9bd873111efbea995449301719a1a7805dbc5c"}, + {file = "libcst-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97fbc73c87e9040e148881041fd5ffa2a6ebf11f64b4ccb5b52e574b95df1a15"}, + {file = "libcst-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99fdc1929703fd9e7408aed2e03f58701c5280b05c8911753a8d8619f7dfdda5"}, + {file = "libcst-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0bf69cbbab5016d938aac4d3ae70ba9ccb3f90363c588b3b97be434e6ba95403"}, + {file = "libcst-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:fe41b33aa73635b1651f64633f429f7aa21f86d2db5748659a99d9b7b1ed2a90"}, + {file = "libcst-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:73c086705ed34dbad16c62c9adca4249a556c1b022993d511da70ea85feaf669"}, + {file = "libcst-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3a07ecfabbbb8b93209f952a365549e65e658831e9231649f4f4e4263cad24b1"}, + {file = "libcst-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c653d9121d6572d8b7f8abf20f88b0a41aab77ff5a6a36e5a0ec0f19af0072e8"}, + {file = "libcst-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f1cd308a4c2f71d5e4eec6ee693819933a03b78edb2e4cc5e3ad1afd5fb3f07"}, + {file = "libcst-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8afb6101b8b3c86c5f9cec6b90ab4da16c3c236fe7396f88e8b93542bb341f7c"}, + {file = "libcst-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:d22d1abfe49aa60fc61fa867e10875a9b3024ba5a801112f4d7ba42d8d53242e"}, + {file = "libcst-1.1.0.tar.gz", hash = "sha256:0acbacb9a170455701845b7e940e2d7b9519db35a86768d86330a0b0deae1086"}, +] + +[package.dependencies] +pyyaml = ">=5.2" +typing-extensions = ">=3.7.4.2" +typing-inspect = ">=0.4.0" + +[package.extras] +dev = ["Sphinx (>=5.1.1)", "black (==23.9.1)", "build (>=0.10.0)", "coverage (>=4.5.4)", "fixit (==2.0.0.post1)", "flake8 (>=3.7.8,<5)", "hypothesis (>=4.36.0)", "hypothesmith (>=0.0.4)", "jinja2 (==3.1.2)", "jupyter (>=1.0.0)", "maturin (>=0.8.3,<0.16)", "nbsphinx (>=0.4.2)", "prompt-toolkit (>=2.0.9)", "pyre-check (==0.9.18)", "setuptools-rust (>=1.5.2)", "setuptools-scm (>=6.0.1)", "slotscheck (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "ufmt (==2.2.0)", "usort (==1.0.7)"] + +[[package]] +name = "libesedb-python" +version = "20230318" +description = "Python bindings module for libesedb" +optional = true +python-versions = "*" +files = [ + {file = "libesedb-python-20230318.tar.gz", hash = "sha256:b049803ba168310e8a9a532359436caf7178df47d6aa985d1ef27f0df4974c18"}, + {file = "libesedb_python-20230318-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:8627f679194e707bc14ffc1a86a6538cc1f42e69a2baeed2210533f11cba39dd"}, + {file = "libesedb_python-20230318-cp310-cp310-win32.whl", hash = "sha256:db9a2f95a97ced0ca3790b7d626d009c4434ddb31f238d6c45755b7a0ea9e5e9"}, + {file = "libesedb_python-20230318-cp310-cp310-win_amd64.whl", hash = "sha256:9b8579c16019100f5f138218725029ee04cc444bdc7bdfd1e73737f139a64798"}, + {file = "libesedb_python-20230318-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:367f0db55651a9c795535a86eb1090932c47c93280a9253c73de75b29b0be57d"}, + {file = "libesedb_python-20230318-cp37-cp37m-macosx_12_0_x86_64.whl", hash = "sha256:a37c3a2448381fd42798efe8052b93788e967a4157e7f22b1734f2cc2a2efae7"}, + {file = "libesedb_python-20230318-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:263c1c3b7538d354bc1f9bb64f2c4f1b9c522144ad3d9f82eb18f0ea6dc86e84"}, + {file = "libesedb_python-20230318-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:398f68b388e5d0c818f7891a37e2e2da0fc20e168f762246cbaaed6bb04d0763"}, +] + +[[package]] +name = "libevt-python" +version = "20221022" +description = "Python bindings module for libevt" +optional = true +python-versions = "*" +files = [ + {file = "libevt-python-20221022.tar.gz", hash = "sha256:9b33e9da215cf1eeb4578a0469c6a2f55d07ff19cdce8a8c8064ed03d464bf27"}, + {file = "libevt_python-20221022-cp27-cp27m-win32.whl", hash = "sha256:3baf1fe9340626b4d56f8a936f0ee1e5f66839caac17e5b5c6902069382b49ed"}, + {file = "libevt_python-20221022-cp27-cp27m-win_amd64.whl", hash = "sha256:b96b046671f2e2522bfddcab7d781786ecfa68e284a2ec834b238dd5d7537f48"}, + {file = "libevt_python-20221022-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:14c321f9643377de1754814a96c191e00d7a91b8c017e81e516b81444a6e6ae9"}, + {file = "libevt_python-20221022-cp310-cp310-win32.whl", hash = "sha256:8de4ea472f826a301d2e9699b9f086814e8cc922c29abac3803fdcc7b4c247ce"}, + {file = "libevt_python-20221022-cp310-cp310-win_amd64.whl", hash = "sha256:0bfc4f7ff1b7abd5d0239eff2464e5c1f6ef9ec782a5a609ee39852bcdf7c0da"}, +] + +[[package]] +name = "libevtx-python" +version = "20221101" +description = "Python bindings module for libevtx" +optional = true +python-versions = "*" +files = [ + {file = "libevtx-python-20221101.tar.gz", hash = "sha256:d8004ea30ec3abd5b6312e09db6d4e43a397d54a9067dadeb1e669bbbfea0d37"}, + {file = "libevtx_python-20221101-cp27-cp27m-win32.whl", hash = "sha256:cfcb380f5d4eca9aee33a7460977b18453376860274e0669809f78a4019cbecd"}, + {file = "libevtx_python-20221101-cp27-cp27m-win_amd64.whl", hash = "sha256:5d84f3fcff00ebab15c48e3cea0b6a2347ef8f583230d2f39c44ce5aa55fc7b3"}, + {file = "libevtx_python-20221101-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:7552d3e5ce827b26e877c7591d2e4a6236b2e46a9ed65026e01ff16ced438743"}, + {file = "libevtx_python-20221101-cp310-cp310-win32.whl", hash = "sha256:1f3ebebd677e800997007cb32d1cd26731ddd979f417d502d65e92a03b610171"}, + {file = "libevtx_python-20221101-cp310-cp310-win_amd64.whl", hash = "sha256:ad5dc573b61315c4592dcc588b0587955290c79f77a869529bb06110a41a7709"}, +] + +[[package]] +name = "libewf-python" +version = "20230212" +description = "Python bindings module for libewf" +optional = true +python-versions = "*" +files = [ + {file = "libewf-python-20230212.tar.gz", hash = "sha256:6bb6cf255a2f3ee9065ab395d6978cdf5e30f5a941dca93e3b0d563250f9f8b0"}, + {file = "libewf_python-20230212-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:1248b1ddfb85c111d605de2eee8d69082bb6bbce579a0cdae9b3479e0315cdbc"}, + {file = "libewf_python-20230212-cp310-cp310-win32.whl", hash = "sha256:8dfb496bea6443bb9164b3ca2ade601b7e28a455cc7e3a7296d4bd3451c91313"}, + {file = "libewf_python-20230212-cp310-cp310-win_amd64.whl", hash = "sha256:95fbf898efd292ee75df10360ba6c4d1cad174baab53130622d97d81ee01c3a6"}, + {file = "libewf_python-20230212-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:9f54cd377073c647bbebaa456e92daa9a48a4bad9165b3b9838601265694836c"}, + {file = "libewf_python-20230212-cp37-cp37m-macosx_12_0_x86_64.whl", hash = "sha256:b66a61740efc1dd272dfb0c12f9afbd34ac095db616623c76c630783d945c3bc"}, + {file = "libewf_python-20230212-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:97b81cd93acc61fba2aab8f2e4027b201db23e1526f6b1130a74993c698741bf"}, + {file = "libewf_python-20230212-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:d510e22cf9c6845358994f9a5d32e9f55badbed4e9aa232f0ad9ffab2237c463"}, +] + +[[package]] +name = "libfsapfs-python" +version = "20230617" +description = "Python bindings module for libfsapfs" +optional = true +python-versions = "*" +files = [ + {file = "libfsapfs-python-20230617.tar.gz", hash = "sha256:cc23857976ee45078e28b15fdfb057a5348e21787e5f209dba3c449f08b4882d"}, + {file = "libfsapfs_python-20230617-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:66b935a389ce5e77a78731d167fd76e1bf75d229d9ac5e9f8dc86e65f88aa76e"}, + {file = "libfsapfs_python-20230617-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:f228c193c00d2dadabf2143beea3fb8d67927d6ff371413926ce8f7bb4b1270a"}, + {file = "libfsapfs_python-20230617-cp311-cp311-win32.whl", hash = "sha256:20cf8a3f59ffe85c5ec54358be0a166c06b263b84ba31967f3dd0cdc01e9e3c1"}, + {file = "libfsapfs_python-20230617-cp311-cp311-win_amd64.whl", hash = "sha256:bc3b3bec572011beb22489103942d194f6e02fd844b00044dfdd87437df8d4ff"}, + {file = "libfsapfs_python-20230617-cp37-cp37m-macosx_12_0_x86_64.whl", hash = "sha256:cad586a28fce437f8eec3b7acceda7a71e06853e97b9c2c6126ce0e450b733ff"}, + {file = "libfsapfs_python-20230617-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:40f5d956c4855e0ce36735ddc76dc9f1448ae26b16d23322820a9fc3e99d3b57"}, + {file = "libfsapfs_python-20230617-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:4983b339a1a09b4198b552cae8dfe83fee8467e6685bc46cbb7034008da7068e"}, +] + +[[package]] +name = "libfsext-python" +version = "20230603" +description = "Python bindings module for libfsext" +optional = true +python-versions = "*" +files = [ + {file = "libfsext-python-20230603.tar.gz", hash = "sha256:3c3dd65bcb3f45e7236d306be9170f25515c7cb9e5f0636337cad8c218e10fe9"}, + {file = "libfsext_python-20230603-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:146f4a71a65c6b4c91b28a3c9edd7fdb70033698068b9566306d0ed1f7ed00a2"}, + {file = "libfsext_python-20230603-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:f941b976aabc901884a91f0451725231d123ae88e310059dda513c4a7470a7df"}, + {file = "libfsext_python-20230603-cp311-cp311-win32.whl", hash = "sha256:84b4a284fa72de522be87a7cbca584e1081b3a7268569b3723db427fb18b915a"}, + {file = "libfsext_python-20230603-cp311-cp311-win_amd64.whl", hash = "sha256:c61900f27020215101a38397ddc1c877c72f8f001bec5a140ef158ad787111ad"}, + {file = "libfsext_python-20230603-cp37-cp37m-macosx_12_0_x86_64.whl", hash = "sha256:a1d0ea6d37c80306a5020b414ff3e9d879335c32070d71a77b08e4271a48a2c4"}, + {file = "libfsext_python-20230603-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:4ee99679eb480049aa26083ad58be9c604817f6afcff9a5a5cb1ca2a7b8968e7"}, + {file = "libfsext_python-20230603-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:3249808b150704798f46a4e7bf1f3f9ac248ab5237af421e6431af52b4e61188"}, +] + +[[package]] +name = "libfsfat-python" +version = "20220925" +description = "Python bindings module for libfsfat" +optional = true +python-versions = "*" +files = [ + {file = "libfsfat-python-20220925.tar.gz", hash = "sha256:76fd6919b34eef7c68817ae6a27d6cc268cdbb920210828ac7f0f7b9674d369e"}, + {file = "libfsfat_python-20220925-cp27-cp27m-win32.whl", hash = "sha256:a314e907f19d4221db900270f4ee90b92fa994b47620610d2080eed1f79de741"}, + {file = "libfsfat_python-20220925-cp27-cp27m-win_amd64.whl", hash = "sha256:625200cd5cc031653ccf5280d094a0fe003999a7af1df57db6e7a9efca51ed4f"}, + {file = "libfsfat_python-20220925-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:5c6c69cb43040f12e0ada700b318f276356a34903d475053b7d03ef91c09c6ef"}, + {file = "libfsfat_python-20220925-cp310-cp310-win32.whl", hash = "sha256:b8ae24636533dd3e82844e3f0a1aaf685be292b0299177338e1386125decee54"}, + {file = "libfsfat_python-20220925-cp310-cp310-win_amd64.whl", hash = "sha256:85b856dac05271319378a01f0859913d74797e81425ec49792346696296078a0"}, +] + +[[package]] +name = "libfshfs-python" +version = "20220831" +description = "Python bindings module for libfshfs" +optional = true +python-versions = "*" +files = [ + {file = "libfshfs-python-20220831.tar.gz", hash = "sha256:bca65aa50cffc4afd8aef678fab30274877c8ffe848e206733800cc03d44d74f"}, + {file = "libfshfs_python-20220831-cp27-cp27m-win32.whl", hash = "sha256:67169fdee829bc52c31819ddbd49c653ec9bfa031a762a5ef67d7f237325a5a6"}, + {file = "libfshfs_python-20220831-cp27-cp27m-win_amd64.whl", hash = "sha256:d2649dde55a29164e8bd5ad97b2bd86f92f6429914b568473689b3f5bf06e95f"}, + {file = "libfshfs_python-20220831-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:67c6370a1611cf626221a0bd5b70735a6084ce1954b4708e759919879672dda7"}, + {file = "libfshfs_python-20220831-cp310-cp310-win32.whl", hash = "sha256:17a27618677c190a5313ee0b14bd69dfe2581817babe1339f3f21fe01446f4f4"}, + {file = "libfshfs_python-20220831-cp310-cp310-win_amd64.whl", hash = "sha256:c3d55c20225afdc66b7c0c1a6432784bc3b366c94d8b55217cf7bc9fe595cd18"}, +] + +[[package]] +name = "libfsntfs-python" +version = "20230606" +description = "Python bindings module for libfsntfs" +optional = true +python-versions = "*" +files = [ + {file = "libfsntfs-python-20230606.tar.gz", hash = "sha256:373f0065888ef9db047d12ecc016b20bf077d0a0bfa9cd6306b564b5071ac370"}, + {file = "libfsntfs_python-20230606-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:38dc1e5beb31146ca8fc70003bfc9cc15d98c5405a5d5339767bab8a18049e08"}, + {file = "libfsntfs_python-20230606-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:6998aa3f09ebdfb6434c035987531edccfb9e3ca35c367b488ccd4e96331fd2e"}, + {file = "libfsntfs_python-20230606-cp311-cp311-win32.whl", hash = "sha256:d16fb849d3f92840b78b13328484096cccb6a587681353b81b1f2b1c79f452a3"}, + {file = "libfsntfs_python-20230606-cp311-cp311-win_amd64.whl", hash = "sha256:5037a66e562ed03ff57b36dcd8666b555dda4dca1e2045d7f5654764182477a0"}, + {file = "libfsntfs_python-20230606-cp37-cp37m-macosx_12_0_x86_64.whl", hash = "sha256:cc4a946073920e7d26d8f299d1b4a7b7ea0ab635bccad3ef5269f2976968c185"}, + {file = "libfsntfs_python-20230606-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:f0df820bd6d91103a36664f228fcc8564715bd9c4f446149d90a1e751bfabdff"}, + {file = "libfsntfs_python-20230606-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:c70df92a678553c52ad98c140fb3f6f6aa335a5103489fbc1dccef577475f7d7"}, +] + +[[package]] +name = "libfsxfs-python" +version = "20220829" +description = "Python bindings module for libfsxfs" +optional = true +python-versions = "*" +files = [ + {file = "libfsxfs-python-20220829.tar.gz", hash = "sha256:98dbd22cefc1ebdcd020b11c5534db2f761724924e9b4a3be121b61d9d3e5343"}, + {file = "libfsxfs_python-20220829-cp27-cp27m-win32.whl", hash = "sha256:47eb444e9fcc32b15160fba1597f50c8ffe420e34772f72f96305fd85ca568ac"}, + {file = "libfsxfs_python-20220829-cp27-cp27m-win_amd64.whl", hash = "sha256:b060b5148a37b69adf8de0089435d09894192440d2524799d69206ee16b24b80"}, + {file = "libfsxfs_python-20220829-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:46f8682ced362a73b6e190a834bbd82c834acd40210e307da352709773824b1e"}, + {file = "libfsxfs_python-20220829-cp310-cp310-win32.whl", hash = "sha256:44f086b56fd2ced20894e25baccede09f4af7396d0628c5b470e19ce5c203b4e"}, + {file = "libfsxfs_python-20220829-cp310-cp310-win_amd64.whl", hash = "sha256:35bfe1f3e34816b045a892718fb0101fb9596ac9bb83cd3b1a1f4dbbfb76d234"}, +] + +[[package]] +name = "libfvde-python" +version = "20220915" +description = "Python bindings module for libfvde" +optional = true +python-versions = "*" +files = [ + {file = "libfvde-python-20220915.tar.gz", hash = "sha256:b449a64af72c7bbfe8c4e6e28091dc4e5d345930e1e684235fda926e4a260333"}, + {file = "libfvde_python-20220915-cp27-cp27m-win32.whl", hash = "sha256:369c1b7299cc1adbdea53f6f522ab21e157b5fea5ffe0feedec21c7a5e0355b8"}, + {file = "libfvde_python-20220915-cp27-cp27m-win_amd64.whl", hash = "sha256:fbfa17477ff13c032e8c7e8dca960b182e2a8d4baad40a13c9a864745fd2fb1b"}, + {file = "libfvde_python-20220915-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:9fdf019ce73494aa14609f348f874faa9440f4c2ef8625cdc3835b795cbf5029"}, + {file = "libfvde_python-20220915-cp310-cp310-win32.whl", hash = "sha256:062778108dca75fb942ee46cc41770fbde757ebe72e57258d6d75e0e193f7ef8"}, + {file = "libfvde_python-20220915-cp310-cp310-win_amd64.whl", hash = "sha256:57bb643f9d3222b5f77b1f807135ee331c36166029ebd844d84938966b7198ff"}, +] + +[[package]] +name = "libfwnt-python" +version = "20220922" +description = "Python bindings module for libfwnt" +optional = true +python-versions = "*" +files = [ + {file = "libfwnt-python-20220922.tar.gz", hash = "sha256:48250ae5c36930d754023d4f49786a8609c057c5567c37f8bd81e26ac9a65da1"}, + {file = "libfwnt_python-20220922-cp27-cp27m-win32.whl", hash = "sha256:213620e071ed6fbb2555043be002b103b36b0cb28ca04956f09195451d8f76a3"}, + {file = "libfwnt_python-20220922-cp27-cp27m-win_amd64.whl", hash = "sha256:631f0e347987ebf8cc280e2fb06793c9839dd38bad29eca637798d8873f4fbe4"}, + {file = "libfwnt_python-20220922-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:22772b4e5c59efb88801df35b7e69b85c73410a741449d5af252d497e22e1264"}, + {file = "libfwnt_python-20220922-cp310-cp310-win32.whl", hash = "sha256:67929de58db49205018864417aa168616a2d20aa71fd20ad41cc92b6cf29899e"}, + {file = "libfwnt_python-20220922-cp310-cp310-win_amd64.whl", hash = "sha256:a236011bef5e2534d23da1312499467418bb6d74c9ad22a192453e22118950f0"}, +] + +[[package]] +name = "libfwsi-python" +version = "20230710" +description = "Python bindings module for libfwsi" +optional = true +python-versions = "*" +files = [ + {file = "libfwsi-python-20230710.tar.gz", hash = "sha256:64ebb0138472cfa13be7b0239802d564862f6604e39202f97b84c1394d687cde"}, + {file = "libfwsi_python-20230710-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:5f0bf8eb2ab8161cb8692c9db301728b8cdde19e7fea2e4037130272b5d74f04"}, + {file = "libfwsi_python-20230710-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:b778c0c187cdc36dd1342b444f1f93545059bd060caa27f0e6a665fbccfc8081"}, + {file = "libfwsi_python-20230710-cp311-cp311-win32.whl", hash = "sha256:a1256a86adc7509e263490c8c64fc5be00eb89758e940b31b97e1b9faba9213e"}, + {file = "libfwsi_python-20230710-cp311-cp311-win_amd64.whl", hash = "sha256:b837e15933a492d439e01f484341c1575e1ab03ae3487f4df514a969b4d65ff5"}, + {file = "libfwsi_python-20230710-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:f9fa55e9998356df61793259fdfdfaf55307fd2932c7c1d435576acb78eccc59"}, + {file = "libfwsi_python-20230710-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:8adc58de91123833814d67bffcdf69d849d8cecc46358092d57619d152e41e46"}, +] + +[[package]] +name = "liblnk-python" +version = "20230928" +description = "Python bindings module for liblnk" +optional = true +python-versions = ">=3.7" +files = [ + {file = "liblnk-python-20230928.tar.gz", hash = "sha256:6459c4da330d02d3ca29319836bf7a17fc43d293b79859e900023b6f65316b21"}, + {file = "liblnk_python-20230928-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:dea452f539be422849f4882bf2340ef203e49afaeb7d1fe9773eb15324aaa90a"}, + {file = "liblnk_python-20230928-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:c454325f504a04f165bef698ca2db24f788857f581602f526a06dd9ff51732fc"}, + {file = "liblnk_python-20230928-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:a6412f6903701411f45253a4d70a9049d43952a75be8b4941eb54364e90661f3"}, + {file = "liblnk_python-20230928-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:51dec5228e229c2405150373ce746056a77c718d2b86b0b1b4c2c163104e535e"}, +] + +[[package]] +name = "libluksde-python" +version = "20221103" +description = "Python bindings module for libluksde" +optional = true +python-versions = "*" +files = [ + {file = "libluksde-python-20221103.tar.gz", hash = "sha256:80fa660a5ba7c8add013cf3d2b7d132bf817dae19b547437b23496abaec1e5f6"}, + {file = "libluksde_python-20221103-cp27-cp27m-win32.whl", hash = "sha256:a7e6fccd02a44bc69d08491a7080219cc32b87ea4521d7432d085ff151500ced"}, + {file = "libluksde_python-20221103-cp27-cp27m-win_amd64.whl", hash = "sha256:7634bd3695172db0282312b33fdd34470aed7056bc79ac21accad7e9b930c219"}, + {file = "libluksde_python-20221103-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:e342cc7d4e77d408c36c0ef584d81a9467976d1762ecc9295d820acdef2ab2c3"}, + {file = "libluksde_python-20221103-cp310-cp310-win32.whl", hash = "sha256:4555ff85de2b16220ed0d574882fd007f752829ee4b51071a71d5c884ef72724"}, + {file = "libluksde_python-20221103-cp310-cp310-win_amd64.whl", hash = "sha256:8def6d57af58aea07e1059c47a4096f2d53d7e5619424f42f588e9668c5a573a"}, +] + +[[package]] +name = "libmodi-python" +version = "20221023" +description = "Python bindings module for libmodi" +optional = true +python-versions = "*" +files = [ + {file = "libmodi-python-20221023.tar.gz", hash = "sha256:465aa3f9ff0d8a32a2df45ffaf7ffac1cc98977d35087f759e30bceaf17eddca"}, + {file = "libmodi_python-20221023-cp27-cp27m-win32.whl", hash = "sha256:5c9c0ec708e568aece905793a698b869eac71feed1d7b698b692d89670a0e3ec"}, + {file = "libmodi_python-20221023-cp27-cp27m-win_amd64.whl", hash = "sha256:98ee877eede96cc04afc063866715aa37989974a4156006b0dd02443cdf437ac"}, + {file = "libmodi_python-20221023-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:0a19ae7b66d752eaf577042640f690292498c87761b51e217ee40efc2a24ae29"}, + {file = "libmodi_python-20221023-cp310-cp310-win32.whl", hash = "sha256:56ffaf9aaa43e2dd8342435d74849b68b8f676c06b069f5697fb3871b4f1c909"}, + {file = "libmodi_python-20221023-cp310-cp310-win_amd64.whl", hash = "sha256:bef906efacdc95b6ec345c32b9cd17202ad451dafe0206ea523f669d1b42f1a0"}, +] + +[[package]] +name = "libmsiecf-python" +version = "20221024" +description = "Python bindings module for libmsiecf" +optional = true +python-versions = "*" +files = [ + {file = "libmsiecf-python-20221024.tar.gz", hash = "sha256:f0287b9959205051055aab8eabfa1a98e4c577adffbd0d503aec537554a888b8"}, + {file = "libmsiecf_python-20221024-cp27-cp27m-win32.whl", hash = "sha256:c691b4480e6d145cb26eb62f4ec989bcb5210b4f75d78b4aa21ccdb7027157c4"}, + {file = "libmsiecf_python-20221024-cp27-cp27m-win_amd64.whl", hash = "sha256:b02355193d1851575d8d227e7e615a0138e5759f8ebb3c1ff12d5c105459c0b9"}, + {file = "libmsiecf_python-20221024-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:f717312a54574d73a8f14645c3382cd41ce6796586c10bcfe7dc84b43b5cbe4e"}, + {file = "libmsiecf_python-20221024-cp310-cp310-win32.whl", hash = "sha256:93e8859dc3552744a32af09413d4d0231c77bb8cea982238347d45c655c970ad"}, + {file = "libmsiecf_python-20221024-cp310-cp310-win_amd64.whl", hash = "sha256:46110afd8d275a93ff89a42610a5776e06d5dda7ae601444681542ea22eddd6d"}, +] + +[[package]] +name = "libolecf-python" +version = "20221024" +description = "Python bindings module for libolecf" +optional = true +python-versions = "*" +files = [ + {file = "libolecf-python-20221024.tar.gz", hash = "sha256:5ad8f97f9351c73738c78f4687a82a209e1466f7043ee1a9e8d880aabcb6dea4"}, + {file = "libolecf_python-20221024-cp27-cp27m-win32.whl", hash = "sha256:475b2855236c3e8c104bd83971dc996b10f16ae3a9ff1148d0ba736fc53cffa4"}, + {file = "libolecf_python-20221024-cp27-cp27m-win_amd64.whl", hash = "sha256:d18154fe71511fdf6ec92002fa246571b55ddbae2818ac2c4ab1a13c16fa3169"}, + {file = "libolecf_python-20221024-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:60fa735c8cb10d00c013a4bcbaa973b93f439aed62e1f5a058a934ec7114a894"}, + {file = "libolecf_python-20221024-cp310-cp310-win32.whl", hash = "sha256:17e6a4d20fd61d90255ea51f5656599762ae67317cf989a4bbe0262279170053"}, + {file = "libolecf_python-20221024-cp310-cp310-win_amd64.whl", hash = "sha256:ed7d88741cd7ed29044ee34eb8bed09897bbfaf46313c6bbf9e20925785c87f7"}, +] + +[[package]] +name = "libphdi-python" +version = "20221025" +description = "Python bindings module for libphdi" +optional = true +python-versions = "*" +files = [ + {file = "libphdi-python-20221025.tar.gz", hash = "sha256:e4588b2ef1afe38ef40dd70a6d62c45a9c407e7dda1f006666e53df2602f886a"}, + {file = "libphdi_python-20221025-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:fe08e3b1737fa3170eda03e99da094ba68687490b5f87177e17d0521e8c21a28"}, +] + +[[package]] +name = "libqcow-python" +version = "20221124" +description = "Python bindings module for libqcow" +optional = true +python-versions = "*" +files = [ + {file = "libqcow-python-20221124.tar.gz", hash = "sha256:a7409d35c4f7b7629d893a75834d20c3db6cc66ba82972277f2401860fbae272"}, + {file = "libqcow_python-20221124-cp27-cp27m-win32.whl", hash = "sha256:38f4387f641a995ad80cda1f1c113d7cfabc7d965e0e7b052434c6684686de73"}, + {file = "libqcow_python-20221124-cp27-cp27m-win_amd64.whl", hash = "sha256:ee4789a9e87a5477607ba040c052a0f35949a117a6c5b09ee73c0bedd60636b4"}, + {file = "libqcow_python-20221124-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:819ecf7bc4f3ebe3ff99806f847dc213fb3ea2e00fbc4ad189e1acc536a9de6d"}, + {file = "libqcow_python-20221124-cp310-cp310-win32.whl", hash = "sha256:61a6adbcb2d0aa2422e693621146beeec5068eb722e2d5d250136d4e304182e0"}, + {file = "libqcow_python-20221124-cp310-cp310-win_amd64.whl", hash = "sha256:de60bc7a9b3cdde61c7955137da3518680a00329772ffe5d49034b383dccc048"}, +] + +[[package]] +name = "libregf-python" +version = "20230319" +description = "Python bindings module for libregf" +optional = true +python-versions = "*" +files = [ + {file = "libregf-python-20230319.tar.gz", hash = "sha256:538594d8ed5e85b47e849b11b64c747d34fa4db16086e568ec87ece82fe10084"}, + {file = "libregf_python-20230319-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:82992eff98ade8f8bbb88e9c41f7b5d566cc5acce3381bf36bb62f82b787889b"}, + {file = "libregf_python-20230319-cp310-cp310-win32.whl", hash = "sha256:9ed2c5e0c6947175c12af021b566fe8e6dfa35c1f4d197aee280c271d4ce8327"}, + {file = "libregf_python-20230319-cp310-cp310-win_amd64.whl", hash = "sha256:2a02a7c3609e2fb5b097ed9c3c4cefe4e1ad7c8ffcbd34bb9d9c649608f70598"}, + {file = "libregf_python-20230319-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:a1ccab73bd3ef4dbad810ff00bd9fdac22cbce7eb64bd4b5a29f20605a816597"}, + {file = "libregf_python-20230319-cp37-cp37m-macosx_12_0_x86_64.whl", hash = "sha256:e2e6744751e327e69a5004386eac658ccfc7ea29b35322155d921d359e5dad61"}, + {file = "libregf_python-20230319-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:c5890b91c0ace5fc945a8f6eec7eae3fcb35e8de4aae83f357e9b466e8117404"}, + {file = "libregf_python-20230319-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:83e18b9fe5cc111dc6fd2379c19c5cef5e10f871c9a8d100cb82391f934b6972"}, +] + +[[package]] +name = "libscca-python" +version = "20230716" +description = "Python bindings module for libscca" +optional = true +python-versions = "*" +files = [ + {file = "libscca-python-20230716.tar.gz", hash = "sha256:aca8b0f56aa6256f57366bcab27b693257e15f74a14e97c07a44f94f255a12af"}, + {file = "libscca_python-20230716-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:3b2d3a212a24908284a7f1e0178b2ab9a500a5a8682bb76fa65633fd6d637ed2"}, + {file = "libscca_python-20230716-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:98eaa4e69769ab00eef20e659e1b75faf5365fac88b2829e72ad50827c57a44a"}, + {file = "libscca_python-20230716-cp311-cp311-win32.whl", hash = "sha256:c16a9afbe73837c71ff8b9bba514b6e48b9e6127e187bc9ef1861dc2d7d6ec46"}, + {file = "libscca_python-20230716-cp311-cp311-win_amd64.whl", hash = "sha256:5a465dcc3ce0a763f3646ffdbe660e1f4c19a3bd43520f07f010f7bc250354b4"}, + {file = "libscca_python-20230716-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:5f34fa592d70be620935d7cd23df1d55d0787a5e567b7da3ba6ec4922aca906a"}, + {file = "libscca_python-20230716-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:846b78ae5d8746e5314526d903430f56ce854efed94956f0e18f5ff7708f55a4"}, +] + +[[package]] +name = "libsigscan-python" +version = "20230109" +description = "Python bindings module for libsigscan" +optional = true +python-versions = "*" +files = [ + {file = "libsigscan-python-20230109.tar.gz", hash = "sha256:4fa0dad6f1b9825f8b19099fb803fbc239cca4108da3986403c6f3986bf1ff63"}, + {file = "libsigscan_python-20230109-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:5f18592f6d38103b953be8847ae1542f46442778d112d0b8b9311ffd9d782f53"}, + {file = "libsigscan_python-20230109-cp310-cp310-win32.whl", hash = "sha256:184e1e706c0b1922626161479b013866d76eca003124ec39939f8302cb5c8e49"}, + {file = "libsigscan_python-20230109-cp310-cp310-win_amd64.whl", hash = "sha256:d47d758dded12959a533d689132cec7a1fd407ab5fce04023101c7ad8d0e4a4d"}, + {file = "libsigscan_python-20230109-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:72a0d7de6eac130cfab558106741a1ee16047dc6f97244ba1994eda7589b46c9"}, + {file = "libsigscan_python-20230109-cp37-cp37m-macosx_12_0_x86_64.whl", hash = "sha256:566466d07dc3652a9b0aec0a2c6015bd50d568b009e8c6b26f08c678e88c193c"}, + {file = "libsigscan_python-20230109-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:36cc442630e58387162cdc26b1d4e64b72ea36856fac3fd3b0196f10b48c667e"}, + {file = "libsigscan_python-20230109-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:a3ecd8190c0ebb64256df9979240c68bdcd8e00ee5d03d300ed8abf3bb54548a"}, +] + +[[package]] +name = "libsmdev-python" +version = "20221028" +description = "Python bindings module for libsmdev" +optional = true +python-versions = "*" +files = [ + {file = "libsmdev-python-20221028.tar.gz", hash = "sha256:ed4606b30fee75e5dd428cd84a2a8f50f1321908583e80b7c9096b9a660951bd"}, + {file = "libsmdev_python-20221028-cp27-cp27m-win32.whl", hash = "sha256:6694f1cf71736725ce4093742680883db76557e5470a5f0652e9a506e010acf8"}, + {file = "libsmdev_python-20221028-cp27-cp27m-win_amd64.whl", hash = "sha256:f6b901b3cfaa52de5fd3ee220c98e23b590546d732d3d78fee53a1f4906945d2"}, + {file = "libsmdev_python-20221028-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:a325b61ca5184c71826c095f69ca374c7c4301acd0f626f83a67b056b90ad13b"}, + {file = "libsmdev_python-20221028-cp310-cp310-win32.whl", hash = "sha256:fb789a7f5060dc7fe994502f954293393339273b80f11a7d83bb7037c0ea3a1d"}, + {file = "libsmdev_python-20221028-cp310-cp310-win_amd64.whl", hash = "sha256:09989b6e977bf64ecc115a07cd44258de2879b0d5acc45328202b44b4d82047d"}, +] + +[[package]] +name = "libsmraw-python" +version = "20230320" +description = "Python bindings module for libsmraw" +optional = true +python-versions = "*" +files = [ + {file = "libsmraw-python-20230320.tar.gz", hash = "sha256:f2ed5a4c4a60e443b1590a119f6180daf319e1904f7c24faecf5389fb2c7be09"}, + {file = "libsmraw_python-20230320-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:451bc590755044123b410ab243d0de070790615610e4039cae308c458fa2f85a"}, + {file = "libsmraw_python-20230320-cp310-cp310-win32.whl", hash = "sha256:5f84bea1fdd19a4fa4de87f0556cb23b06fa80e1be2d5ed7ea71f5bdff051c68"}, + {file = "libsmraw_python-20230320-cp310-cp310-win_amd64.whl", hash = "sha256:3c0435fe287c72bd3470463838cc116dbb8bf859a12f089d32736728698ba59a"}, + {file = "libsmraw_python-20230320-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:83174b2979da123464feaab5b114178dafac08886e42782a5f8bab569e10c85b"}, + {file = "libsmraw_python-20230320-cp37-cp37m-macosx_12_0_x86_64.whl", hash = "sha256:6fa01fa1f2fa72cdc53f4d69c3c1ec07c5ecd08cc8bfcfd90148108bc689b082"}, + {file = "libsmraw_python-20230320-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:c25b4e36e969793051456275c2dff527ee51e7d0fce8043cd176262a7a075681"}, + {file = "libsmraw_python-20230320-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:ffcb80bc9fa282da489ec884260a5cecfa420a0fb1b947e64b192cdda4016a1c"}, +] + +[[package]] +name = "libvhdi-python" +version = "20221124" +description = "Python bindings module for libvhdi" +optional = true +python-versions = "*" +files = [ + {file = "libvhdi-python-20221124.tar.gz", hash = "sha256:2310de5cf043f1ac628bfd8d179ba01bcf066f313ae06e7a5b504b2a08dd5903"}, + {file = "libvhdi_python-20221124-cp27-cp27m-win32.whl", hash = "sha256:1874bbc6be1267b86d6511fa8fc98c4730e6dfbe8cfa7f321390c1b45a0c9e6b"}, + {file = "libvhdi_python-20221124-cp27-cp27m-win_amd64.whl", hash = "sha256:383fa8a6340f5b9e34497a23158e7afa5a5ff5150084e1f6e17f017e2fd973db"}, + {file = "libvhdi_python-20221124-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:bfdeeaea9bdc6d6d4b0d075722f8883140e87866ee307e57d95b175cab2590ef"}, + {file = "libvhdi_python-20221124-cp310-cp310-win32.whl", hash = "sha256:47646c5bb69fb8ee3592912663c9f77c24d586b2032ab63d8db2301a0dc222d4"}, + {file = "libvhdi_python-20221124-cp310-cp310-win_amd64.whl", hash = "sha256:28edcf26b5f21f5287ded3adb0664f2681060ab77921c076117a413081d7315f"}, +] + +[[package]] +name = "libvmdk-python" +version = "20221124" +description = "Python bindings module for libvmdk" +optional = true +python-versions = "*" +files = [ + {file = "libvmdk-python-20221124.tar.gz", hash = "sha256:81482880ffdc70f7cee5ab912847794390741ab44895e2edf81cb72d788e617a"}, + {file = "libvmdk_python-20221124-cp27-cp27m-win32.whl", hash = "sha256:7dbc88527e7eab7b40d2377cbac933d0aaaed5a9bc94ae887530d6a9093efd0b"}, + {file = "libvmdk_python-20221124-cp27-cp27m-win_amd64.whl", hash = "sha256:f1679488d0fa20a8b878b26fe606a9e2e7328d6449b1e471d27ac32b16818406"}, + {file = "libvmdk_python-20221124-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:b2cba366b0723087626d1397ec933c00bd3845ce9be9427b873384452a0b1905"}, + {file = "libvmdk_python-20221124-cp310-cp310-win32.whl", hash = "sha256:c48b0d02cd5d864cd7f212b5f868ac8464ff13fd23205b69eb1d070f57f6fd1b"}, + {file = "libvmdk_python-20221124-cp310-cp310-win_amd64.whl", hash = "sha256:207e43b331692bda8123611f6e8bfbc2cbd6e52b37103c83611d9b117086a61c"}, +] + +[[package]] +name = "libvsapm-python" +version = "20230506" +description = "Python bindings module for libvsapm" +optional = true +python-versions = "*" +files = [ + {file = "libvsapm-python-20230506.tar.gz", hash = "sha256:22b789dc02e481e6f209b21f6f320d223c590badc97ff9793aafd30b63468271"}, + {file = "libvsapm_python-20230506-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:ce6fa2b28212355d588110166ae6a29a537459497a56ac76739a3a026170ab3d"}, + {file = "libvsapm_python-20230506-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:5f74c7c975eededec8566997be85f569bc94a4adc8a4c9bdd8dd733cad6b2f9d"}, + {file = "libvsapm_python-20230506-cp311-cp311-win32.whl", hash = "sha256:6f25babe37ae8aee1482a4ff249555ace2a240d9a167aa60d4e7e70a99d43963"}, + {file = "libvsapm_python-20230506-cp311-cp311-win_amd64.whl", hash = "sha256:8a7dded77f7bad1ab67e6247ba26a9da2374305098aa76cf295534bf1d2086c7"}, + {file = "libvsapm_python-20230506-cp37-cp37m-macosx_12_0_x86_64.whl", hash = "sha256:e58ffe72c28145e6a59dc4872e0ec743093b49c565102d1292a0823823c02f90"}, + {file = "libvsapm_python-20230506-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:f27f5495a705db1c9e776fdc945ec9936951bdd9839b0e0b97e5c8c2493d6f66"}, + {file = "libvsapm_python-20230506-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:ddc660d2dbc847f8ab4ea063cc3cc301f3eba46f52e1ed9d7f4291d34d0eeca8"}, +] + +[[package]] +name = "libvsgpt-python" +version = "20221029" +description = "Python bindings module for libvsgpt" +optional = true +python-versions = "*" +files = [ + {file = "libvsgpt-python-20221029.tar.gz", hash = "sha256:d868a93ef44c034be25902880429e9f8f88b2e9a3817439eb8d9b4ccc43f4925"}, + {file = "libvsgpt_python-20221029-cp27-cp27m-win32.whl", hash = "sha256:400d3af8629d4d9ae076300a2e9d96b3d34627357f44ba970352d74b02135b4d"}, + {file = "libvsgpt_python-20221029-cp27-cp27m-win_amd64.whl", hash = "sha256:130bf9f87703f0ffa80d871b48a3024c7b2f69d78e98d607e46aa697997dfac9"}, + {file = "libvsgpt_python-20221029-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:a162562375613b11c3949d4783ea4acfb8c7312f976da5ac8adfeda0f4cc7e2c"}, + {file = "libvsgpt_python-20221029-cp310-cp310-win32.whl", hash = "sha256:9d6b0cedd4bfe9582cfb7e7c44bc617afbd0ea6a1af8ccdb8d9da02c6f09e253"}, + {file = "libvsgpt_python-20221029-cp310-cp310-win_amd64.whl", hash = "sha256:f754ea1dff14aad29d7ab9ba285e831f78404132e8a680cddd54e9f303bcf2d2"}, +] + +[[package]] +name = "libvshadow-python" +version = "20221030" +description = "Python bindings module for libvshadow" +optional = true +python-versions = "*" +files = [ + {file = "libvshadow-python-20221030.tar.gz", hash = "sha256:53d7309bc3727bd7836fbec5901dfd5377c132a9f58c212aa5b8b37176422d08"}, + {file = "libvshadow_python-20221030-cp27-cp27m-win32.whl", hash = "sha256:f54a8efa35a38ec85119988c55b1137e6f04f71634bc821070c47aa87fb910da"}, + {file = "libvshadow_python-20221030-cp27-cp27m-win_amd64.whl", hash = "sha256:39ac1f710dac7d5b56cdfc9ae0cf055f828a911189f6f97a77b9adf7149eba84"}, + {file = "libvshadow_python-20221030-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:b25afe1bf77c44d0a7fe86c7ad998b7c8d487115d45f95f5f6cb5623a4cc512e"}, + {file = "libvshadow_python-20221030-cp310-cp310-win32.whl", hash = "sha256:726741b76428b6bd9b70396d0a48dcdc27bc2cf89a30faa811de839fb33cfcac"}, + {file = "libvshadow_python-20221030-cp310-cp310-win_amd64.whl", hash = "sha256:84ea267e53cba6558e1ceb6f60bff179b5854715aa8baa31d0da1960c2f9c26a"}, +] + +[[package]] +name = "libvslvm-python" +version = "20221025" +description = "Python bindings module for libvslvm" +optional = true +python-versions = "*" +files = [ + {file = "libvslvm-python-20221025.tar.gz", hash = "sha256:214a92ce5b13a9972a6010578d8e0cc919ce2fafcab381600553777e2ef4b80f"}, + {file = "libvslvm_python-20221025-cp27-cp27m-win32.whl", hash = "sha256:d7b9367c134269293dff9366954cbf999367ad83fa3e3da3abacd664edc62bc5"}, + {file = "libvslvm_python-20221025-cp27-cp27m-win_amd64.whl", hash = "sha256:3da04f79142cc8361177fc55756f2792330d35315144e019926994bd9b30271a"}, + {file = "libvslvm_python-20221025-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:4864113099ac917ee23bafd76d68a4b2ad11e83030337c527c3600ae6c0a2c20"}, + {file = "libvslvm_python-20221025-cp310-cp310-win32.whl", hash = "sha256:677859372ebf0d41bcafe0b7d5bd8ce10574404eb8523f40ad27875e21bd18a3"}, + {file = "libvslvm_python-20221025-cp310-cp310-win_amd64.whl", hash = "sha256:c36d0dd0f578cb874998787f692f324542a35941f3822b28bc8a0064710bcc51"}, +] + +[[package]] +name = "lz4" +version = "4.3.2" +description = "LZ4 Bindings for Python" +optional = true +python-versions = ">=3.7" +files = [ + {file = "lz4-4.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1c4c100d99eed7c08d4e8852dd11e7d1ec47a3340f49e3a96f8dfbba17ffb300"}, + {file = "lz4-4.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:edd8987d8415b5dad25e797043936d91535017237f72fa456601be1479386c92"}, + {file = "lz4-4.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7c50542b4ddceb74ab4f8b3435327a0861f06257ca501d59067a6a482535a77"}, + {file = "lz4-4.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f5614d8229b33d4a97cb527db2a1ac81308c6e796e7bdb5d1309127289f69d5"}, + {file = "lz4-4.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f00a9ba98f6364cadda366ae6469b7b3568c0cced27e16a47ddf6b774169270"}, + {file = "lz4-4.3.2-cp310-cp310-win32.whl", hash = "sha256:b10b77dc2e6b1daa2f11e241141ab8285c42b4ed13a8642495620416279cc5b2"}, + {file = "lz4-4.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:86480f14a188c37cb1416cdabacfb4e42f7a5eab20a737dac9c4b1c227f3b822"}, + {file = "lz4-4.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7c2df117def1589fba1327dceee51c5c2176a2b5a7040b45e84185ce0c08b6a3"}, + {file = "lz4-4.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1f25eb322eeb24068bb7647cae2b0732b71e5c639e4e4026db57618dcd8279f0"}, + {file = "lz4-4.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8df16c9a2377bdc01e01e6de5a6e4bbc66ddf007a6b045688e285d7d9d61d1c9"}, + {file = "lz4-4.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f571eab7fec554d3b1db0d666bdc2ad85c81f4b8cb08906c4c59a8cad75e6e22"}, + {file = "lz4-4.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7211dc8f636ca625abc3d4fb9ab74e5444b92df4f8d58ec83c8868a2b0ff643d"}, + {file = "lz4-4.3.2-cp311-cp311-win32.whl", hash = "sha256:867664d9ca9bdfce840ac96d46cd8838c9ae891e859eb98ce82fcdf0e103a947"}, + {file = "lz4-4.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:a6a46889325fd60b8a6b62ffc61588ec500a1883db32cddee9903edfba0b7584"}, + {file = "lz4-4.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a85b430138882f82f354135b98c320dafb96fc8fe4656573d95ab05de9eb092"}, + {file = "lz4-4.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65d5c93f8badacfa0456b660285e394e65023ef8071142e0dcbd4762166e1be0"}, + {file = "lz4-4.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b50f096a6a25f3b2edca05aa626ce39979d63c3b160687c8c6d50ac3943d0ba"}, + {file = "lz4-4.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:200d05777d61ba1ff8d29cb51c534a162ea0b4fe6d3c28be3571a0a48ff36080"}, + {file = "lz4-4.3.2-cp37-cp37m-win32.whl", hash = "sha256:edc2fb3463d5d9338ccf13eb512aab61937be50aa70734bcf873f2f493801d3b"}, + {file = "lz4-4.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:83acfacab3a1a7ab9694333bcb7950fbeb0be21660d236fd09c8337a50817897"}, + {file = "lz4-4.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7a9eec24ec7d8c99aab54de91b4a5a149559ed5b3097cf30249b665689b3d402"}, + {file = "lz4-4.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:31d72731c4ac6ebdce57cd9a5cabe0aecba229c4f31ba3e2c64ae52eee3fdb1c"}, + {file = "lz4-4.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83903fe6db92db0be101acedc677aa41a490b561567fe1b3fe68695b2110326c"}, + {file = "lz4-4.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926b26db87ec8822cf1870efc3d04d06062730ec3279bbbd33ba47a6c0a5c673"}, + {file = "lz4-4.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e05afefc4529e97c08e65ef92432e5f5225c0bb21ad89dee1e06a882f91d7f5e"}, + {file = "lz4-4.3.2-cp38-cp38-win32.whl", hash = "sha256:ad38dc6a7eea6f6b8b642aaa0683253288b0460b70cab3216838747163fb774d"}, + {file = "lz4-4.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:7e2dc1bd88b60fa09b9b37f08553f45dc2b770c52a5996ea52b2b40f25445676"}, + {file = "lz4-4.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:edda4fb109439b7f3f58ed6bede59694bc631c4b69c041112b1b7dc727fffb23"}, + {file = "lz4-4.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ca83a623c449295bafad745dcd399cea4c55b16b13ed8cfea30963b004016c9"}, + {file = "lz4-4.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5ea0e788dc7e2311989b78cae7accf75a580827b4d96bbaf06c7e5a03989bd5"}, + {file = "lz4-4.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a98b61e504fb69f99117b188e60b71e3c94469295571492a6468c1acd63c37ba"}, + {file = "lz4-4.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4931ab28a0d1c133104613e74eec1b8bb1f52403faabe4f47f93008785c0b929"}, + {file = "lz4-4.3.2-cp39-cp39-win32.whl", hash = "sha256:ec6755cacf83f0c5588d28abb40a1ac1643f2ff2115481089264c7630236618a"}, + {file = "lz4-4.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:4caedeb19e3ede6c7a178968b800f910db6503cb4cb1e9cc9221157572139b49"}, + {file = "lz4-4.3.2.tar.gz", hash = "sha256:e1431d84a9cfb23e6773e72078ce8e65cad6745816d4cbf9ae67da5ea419acda"}, +] + +[package.extras] +docs = ["sphinx (>=1.6.0)", "sphinx-bootstrap-theme"] +flake8 = ["flake8"] +tests = ["psutil", "pytest (!=3.3.0)", "pytest-cov"] + +[[package]] +name = "markupsafe" +version = "2.1.3" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, +] + +[[package]] +name = "mock" +version = "5.1.0" +description = "Rolling backport of unittest.mock for all Pythons" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mock-5.1.0-py3-none-any.whl", hash = "sha256:18c694e5ae8a208cdb3d2c20a993ca1a7b0efa258c247a1e565150f477f83744"}, + {file = "mock-5.1.0.tar.gz", hash = "sha256:5e96aad5ccda4718e0a229ed94b2024df75cc2d55575ba5762d31f5767b8767d"}, +] + +[package.extras] +build = ["blurb", "twine", "wheel"] +docs = ["sphinx"] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "more-itertools" +version = "10.1.0" +description = "More routines for operating on iterables, beyond itertools" +optional = true +python-versions = ">=3.8" +files = [ + {file = "more-itertools-10.1.0.tar.gz", hash = "sha256:626c369fa0eb37bac0291bce8259b332fd59ac792fa5497b59837309cd5b114a"}, + {file = "more_itertools-10.1.0-py3-none-any.whl", hash = "sha256:64e0735fcfdc6f3464ea133afe8ea4483b1c5fe3a3d69852e6503b43a0b222e6"}, +] + +[[package]] +name = "msal" +version = "1.24.1" +description = "The Microsoft Authentication Library (MSAL) for Python library" +optional = false +python-versions = ">=2.7" +files = [ + {file = "msal-1.24.1-py2.py3-none-any.whl", hash = "sha256:ce4320688f95c301ee74a4d0e9dbcfe029a63663a8cc61756f40d0d0d36574ad"}, + {file = "msal-1.24.1.tar.gz", hash = "sha256:aa0972884b3c6fdec53d9a0bd15c12e5bd7b71ac1b66d746f54d128709f3f8f8"}, +] + +[package.dependencies] +cryptography = ">=0.6,<44" +PyJWT = {version = ">=1.0.0,<3", extras = ["crypto"]} +requests = ">=2.0.0,<3" + +[package.extras] +broker = ["pymsalruntime (>=0.13.2,<0.14)"] + +[[package]] +name = "msal-extensions" +version = "1.0.0" +description = "Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS and Linux. Concurrent data access will be coordinated by a file lock mechanism." +optional = false +python-versions = "*" +files = [ + {file = "msal-extensions-1.0.0.tar.gz", hash = "sha256:c676aba56b0cce3783de1b5c5ecfe828db998167875126ca4b47dc6436451354"}, + {file = "msal_extensions-1.0.0-py2.py3-none-any.whl", hash = "sha256:91e3db9620b822d0ed2b4d1850056a0f133cba04455e62f11612e40f5502f2ee"}, +] + +[package.dependencies] +msal = ">=0.4.1,<2.0.0" +portalocker = [ + {version = ">=1.0,<3", markers = "python_version >= \"3.5\" and platform_system != \"Windows\""}, + {version = ">=1.6,<3", markers = "python_version >= \"3.5\" and platform_system == \"Windows\""}, +] + +[[package]] +name = "msrest" +version = "0.7.1" +description = "AutoRest swagger generator Python client runtime." +optional = false +python-versions = ">=3.6" +files = [ + {file = "msrest-0.7.1-py3-none-any.whl", hash = "sha256:21120a810e1233e5e6cc7fe40b474eeb4ec6f757a15d7cf86702c369f9567c32"}, + {file = "msrest-0.7.1.zip", hash = "sha256:6e7661f46f3afd88b75667b7187a92829924446c7ea1d169be8c4bb7eeb788b9"}, +] + +[package.dependencies] +azure-core = ">=1.24.0" +certifi = ">=2017.4.17" +isodate = ">=0.6.0" +requests = ">=2.16,<3.0" +requests-oauthlib = ">=0.5.0" + +[package.extras] +async = ["aiodns", "aiohttp (>=3.0)"] + +[[package]] +name = "msrestazure" +version = "0.6.4" +description = "AutoRest swagger generator Python client runtime. Azure-specific module." +optional = false +python-versions = "*" +files = [ + {file = "msrestazure-0.6.4-py2.py3-none-any.whl", hash = "sha256:3de50f56147ef529b31e099a982496690468ecef33f0544cb0fa0cfe1e1de5b9"}, + {file = "msrestazure-0.6.4.tar.gz", hash = "sha256:a06f0dabc9a6f5efe3b6add4bd8fb623aeadacf816b7a35b0f89107e0544d189"}, +] + +[package.dependencies] +adal = ">=0.6.0,<2.0.0" +msrest = ">=0.6.0,<2.0.0" +six = "*" + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = true +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "netaddr" +version = "0.9.0" +description = "A network address manipulation library for Python" +optional = false +python-versions = "*" +files = [ + {file = "netaddr-0.9.0-py3-none-any.whl", hash = "sha256:5148b1055679d2a1ec070c521b7db82137887fabd6d7e37f5199b44f775c3bb1"}, + {file = "netaddr-0.9.0.tar.gz", hash = "sha256:7b46fa9b1a2d71fd5de9e4a3784ef339700a53a08c8040f08baf5f1194da0128"}, +] + +[[package]] +name = "numpy" +version = "1.25.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3"}, + {file = "numpy-1.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f"}, + {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187"}, + {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357"}, + {file = "numpy-1.25.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9"}, + {file = "numpy-1.25.2-cp310-cp310-win32.whl", hash = "sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044"}, + {file = "numpy-1.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545"}, + {file = "numpy-1.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418"}, + {file = "numpy-1.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f"}, + {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2"}, + {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf"}, + {file = "numpy-1.25.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364"}, + {file = "numpy-1.25.2-cp311-cp311-win32.whl", hash = "sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d"}, + {file = "numpy-1.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4"}, + {file = "numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3"}, + {file = "numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926"}, + {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca"}, + {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295"}, + {file = "numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f"}, + {file = "numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01"}, + {file = "numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf"}, + {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"}, +] + +[[package]] +name = "numpy" +version = "1.26.1" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = "<3.13,>=3.9" +files = [ + {file = "numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af"}, + {file = "numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67"}, + {file = "numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2"}, + {file = "numpy-1.26.1-cp310-cp310-win32.whl", hash = "sha256:d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297"}, + {file = "numpy-1.26.1-cp310-cp310-win_amd64.whl", hash = "sha256:d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974"}, + {file = "numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c"}, + {file = "numpy-1.26.1-cp311-cp311-win32.whl", hash = "sha256:b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b"}, + {file = "numpy-1.26.1-cp311-cp311-win_amd64.whl", hash = "sha256:3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124"}, + {file = "numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c"}, + {file = "numpy-1.26.1-cp312-cp312-win32.whl", hash = "sha256:af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66"}, + {file = "numpy-1.26.1-cp312-cp312-win_amd64.whl", hash = "sha256:9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908"}, + {file = "numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5"}, + {file = "numpy-1.26.1-cp39-cp39-win32.whl", hash = "sha256:d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104"}, + {file = "numpy-1.26.1-cp39-cp39-win_amd64.whl", hash = "sha256:59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f"}, + {file = "numpy-1.26.1.tar.gz", hash = "sha256:c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe"}, +] + +[[package]] +name = "oauthlib" +version = "3.2.2" +description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" +optional = false +python-versions = ">=3.6" +files = [ + {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, + {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, +] + +[package.extras] +rsa = ["cryptography (>=3.0.0)"] +signals = ["blinker (>=1.4.0)"] +signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] + +[[package]] +name = "opensearch-py" +version = "2.3.2" +description = "Python client for OpenSearch" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" +files = [ + {file = "opensearch-py-2.3.2.tar.gz", hash = "sha256:96e470b55107fd5bfd873722dc9808c333360eacfa174341f5cc2d021aa30448"}, + {file = "opensearch_py-2.3.2-py2.py3-none-any.whl", hash = "sha256:b1d6607380c8f19d90c142470939d051f0bac96069ce0ac25970b3c39c431f8b"}, +] + +[package.dependencies] +certifi = ">=2022.12.07" +python-dateutil = "*" +requests = ">=2.4.0,<3.0.0" +six = "*" +urllib3 = ">=1.26.9" + +[package.extras] +async = ["aiohttp (>=3,<4)"] +develop = ["black", "botocore", "coverage (<7.0.0)", "jinja2", "mock", "myst-parser", "pytest (>=3.0.0)", "pytest-cov", "pytest-mock (<4.0.0)", "pytz", "pyyaml", "requests (>=2.0.0,<3.0.0)", "sphinx", "sphinx-copybutton", "sphinx-rtd-theme"] +docs = ["myst-parser", "sphinx", "sphinx-copybutton", "sphinx-rtd-theme"] +kerberos = ["requests-kerberos"] + +[[package]] +name = "orjson" +version = "3.9.9" +description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" +optional = false +python-versions = ">=3.8" +files = [ + {file = "orjson-3.9.9-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f28090060a31f4d11221f9ba48b2273b0d04b702f4dcaa197c38c64ce639cc51"}, + {file = "orjson-3.9.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8038ba245d0c0a6337cfb6747ea0c51fe18b0cf1a4bc943d530fd66799fae33d"}, + {file = "orjson-3.9.9-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:543b36df56db195739c70d645ecd43e49b44d5ead5f8f645d2782af118249b37"}, + {file = "orjson-3.9.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e7877256b5092f1e4e48fc0f1004728dc6901e7a4ffaa4acb0a9578610aa4ce"}, + {file = "orjson-3.9.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b83e0d8ba4ca88b894c3e00efc59fe6d53d9ffb5dbbb79d437a466fc1a513d"}, + {file = "orjson-3.9.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef06431f021453a47a9abb7f7853f04f031d31fbdfe1cc83e3c6aadde502cce"}, + {file = "orjson-3.9.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0a1a4d9e64597e550428ba091e51a4bcddc7a335c8f9297effbfa67078972b5c"}, + {file = "orjson-3.9.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:879d2d1f6085c9c0831cec6716c63aaa89e41d8e036cabb19a315498c173fcc6"}, + {file = "orjson-3.9.9-cp310-none-win32.whl", hash = "sha256:d3f56e41bc79d30fdf077073072f2377d2ebf0b946b01f2009ab58b08907bc28"}, + {file = "orjson-3.9.9-cp310-none-win_amd64.whl", hash = "sha256:ab7bae2b8bf17620ed381e4101aeeb64b3ba2a45fc74c7617c633a923cb0f169"}, + {file = "orjson-3.9.9-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:31d676bc236f6e919d100fb85d0a99812cff1ebffaa58106eaaec9399693e227"}, + {file = "orjson-3.9.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:678ffb5c0a6b1518b149cc328c610615d70d9297e351e12c01d0beed5d65360f"}, + {file = "orjson-3.9.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a71b0cc21f2c324747bc77c35161e0438e3b5e72db6d3b515310457aba743f7f"}, + {file = "orjson-3.9.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae72621f216d1d990468291b1ec153e1b46e0ed188a86d54e0941f3dabd09ee8"}, + {file = "orjson-3.9.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:512e5a41af008e76451f5a344941d61f48dddcf7d7ddd3073deb555de64596a6"}, + {file = "orjson-3.9.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f89dc338a12f4357f5bf1b098d3dea6072fb0b643fd35fec556f4941b31ae27"}, + {file = "orjson-3.9.9-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:957a45fb201c61b78bcf655a16afbe8a36c2c27f18a998bd6b5d8a35e358d4ad"}, + {file = "orjson-3.9.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1c01cf4b8e00c7e98a0a7cf606a30a26c32adf2560be2d7d5d6766d6f474b31"}, + {file = "orjson-3.9.9-cp311-none-win32.whl", hash = "sha256:397a185e5dd7f8ebe88a063fe13e34d61d394ebb8c70a443cee7661b9c89bda7"}, + {file = "orjson-3.9.9-cp311-none-win_amd64.whl", hash = "sha256:24301f2d99d670ded4fb5e2f87643bc7428a54ba49176e38deb2887e42fe82fb"}, + {file = "orjson-3.9.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:bd55ea5cce3addc03f8fb0705be0cfed63b048acc4f20914ce5e1375b15a293b"}, + {file = "orjson-3.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b28c1a65cd13fff5958ab8b350f0921121691464a7a1752936b06ed25c0c7b6e"}, + {file = "orjson-3.9.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b97a67c47840467ccf116136450c50b6ed4e16a8919c81a4b4faef71e0a2b3f4"}, + {file = "orjson-3.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75b805549cbbcb963e9c9068f1a05abd0ea4c34edc81f8d8ef2edb7e139e5b0f"}, + {file = "orjson-3.9.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5424ecbafe57b2de30d3b5736c5d5835064d522185516a372eea069b92786ba6"}, + {file = "orjson-3.9.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d2cd6ef4726ef1b8c63e30d8287225a383dbd1de3424d287b37c1906d8d2855"}, + {file = "orjson-3.9.9-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c959550e0705dc9f59de8fca1a316da0d9b115991806b217c82931ac81d75f74"}, + {file = "orjson-3.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ece2d8ed4c34903e7f1b64fb1e448a00e919a4cdb104fc713ad34b055b665fca"}, + {file = "orjson-3.9.9-cp312-none-win_amd64.whl", hash = "sha256:f708ca623287186e5876256cb30599308bce9b2757f90d917b7186de54ce6547"}, + {file = "orjson-3.9.9-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:335406231f9247f985df045f0c0c8f6b6d5d6b3ff17b41a57c1e8ef1a31b4d04"}, + {file = "orjson-3.9.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d9b5440a5d215d9e1cfd4aee35fd4101a8b8ceb8329f549c16e3894ed9f18b5"}, + {file = "orjson-3.9.9-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e98ca450cb4fb176dd572ce28c6623de6923752c70556be4ef79764505320acb"}, + {file = "orjson-3.9.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3bf6ca6bce22eb89dd0650ef49c77341440def966abcb7a2d01de8453df083a"}, + {file = "orjson-3.9.9-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb50d869b3c97c7c5187eda3759e8eb15deb1271d694bc5d6ba7040db9e29036"}, + {file = "orjson-3.9.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fcf06c69ccc78e32d9f28aa382ab2ab08bf54b696dbe00ee566808fdf05da7d"}, + {file = "orjson-3.9.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9a4402e7df1b5c9a4c71c7892e1c8f43f642371d13c73242bda5964be6231f95"}, + {file = "orjson-3.9.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b20becf50d4aec7114dc902b58d85c6431b3a59b04caa977e6ce67b6fee0e159"}, + {file = "orjson-3.9.9-cp38-none-win32.whl", hash = "sha256:1f352117eccac268a59fedac884b0518347f5e2b55b9f650c2463dd1e732eb61"}, + {file = "orjson-3.9.9-cp38-none-win_amd64.whl", hash = "sha256:c4eb31a8e8a5e1d9af5aa9e247c2a52ad5cf7e968aaa9aaefdff98cfcc7f2e37"}, + {file = "orjson-3.9.9-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4a308aeac326c2bafbca9abbae1e1fcf682b06e78a54dad0347b760525838d85"}, + {file = "orjson-3.9.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e159b97f5676dcdac0d0f75ec856ef5851707f61d262851eb41a30e8fadad7c9"}, + {file = "orjson-3.9.9-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f692e7aabad92fa0fff5b13a846fb586b02109475652207ec96733a085019d80"}, + {file = "orjson-3.9.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cffb77cf0cd3cbf20eb603f932e0dde51b45134bdd2d439c9f57924581bb395b"}, + {file = "orjson-3.9.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c63eca397127ebf46b59c9c1fb77b30dd7a8fc808ac385e7a58a7e64bae6e106"}, + {file = "orjson-3.9.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06f0c024a75e8ba5d9101facb4fb5a028cdabe3cdfe081534f2a9de0d5062af2"}, + {file = "orjson-3.9.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8cba20c9815c2a003b8ca4429b0ad4aa87cb6649af41365821249f0fd397148e"}, + {file = "orjson-3.9.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:906cac73b7818c20cf0f6a7dde5a6f009c52aecc318416c7af5ea37f15ca7e66"}, + {file = "orjson-3.9.9-cp39-none-win32.whl", hash = "sha256:50232572dd300c49f134838c8e7e0917f29a91f97dbd608d23f2895248464b7f"}, + {file = "orjson-3.9.9-cp39-none-win_amd64.whl", hash = "sha256:920814e02e3dd7af12f0262bbc18b9fe353f75a0d0c237f6a67d270da1a1bb44"}, + {file = "orjson-3.9.9.tar.gz", hash = "sha256:02e693843c2959befdd82d1ebae8b05ed12d1cb821605d5f9fe9f98ca5c9fd2b"}, +] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] + +[[package]] +name = "pandas" +version = "2.1.0" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:40dd20439ff94f1b2ed55b393ecee9cb6f3b08104c2c40b0cb7186a2f0046242"}, + {file = "pandas-2.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d4f38e4fedeba580285eaac7ede4f686c6701a9e618d8a857b138a126d067f2f"}, + {file = "pandas-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e6a0fe052cf27ceb29be9429428b4918f3740e37ff185658f40d8702f0b3e09"}, + {file = "pandas-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d81e1813191070440d4c7a413cb673052b3b4a984ffd86b8dd468c45742d3cc"}, + {file = "pandas-2.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eb20252720b1cc1b7d0b2879ffc7e0542dd568f24d7c4b2347cb035206936421"}, + {file = "pandas-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:38f74ef7ebc0ffb43b3d633e23d74882bce7e27bfa09607f3c5d3e03ffd9a4a5"}, + {file = "pandas-2.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cda72cc8c4761c8f1d97b169661f23a86b16fdb240bdc341173aee17e4d6cedd"}, + {file = "pandas-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d97daeac0db8c993420b10da4f5f5b39b01fc9ca689a17844e07c0a35ac96b4b"}, + {file = "pandas-2.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8c58b1113892e0c8078f006a167cc210a92bdae23322bb4614f2f0b7a4b510f"}, + {file = "pandas-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:629124923bcf798965b054a540f9ccdfd60f71361255c81fa1ecd94a904b9dd3"}, + {file = "pandas-2.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:70cf866af3ab346a10debba8ea78077cf3a8cd14bd5e4bed3d41555a3280041c"}, + {file = "pandas-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:d53c8c1001f6a192ff1de1efe03b31a423d0eee2e9e855e69d004308e046e694"}, + {file = "pandas-2.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86f100b3876b8c6d1a2c66207288ead435dc71041ee4aea789e55ef0e06408cb"}, + {file = "pandas-2.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28f330845ad21c11db51e02d8d69acc9035edfd1116926ff7245c7215db57957"}, + {file = "pandas-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9a6ccf0963db88f9b12df6720e55f337447aea217f426a22d71f4213a3099a6"}, + {file = "pandas-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d99e678180bc59b0c9443314297bddce4ad35727a1a2656dbe585fd78710b3b9"}, + {file = "pandas-2.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b31da36d376d50a1a492efb18097b9101bdbd8b3fbb3f49006e02d4495d4c644"}, + {file = "pandas-2.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0164b85937707ec7f70b34a6c3a578dbf0f50787f910f21ca3b26a7fd3363437"}, + {file = "pandas-2.1.0.tar.gz", hash = "sha256:62c24c7fc59e42b775ce0679cfa7b14a5f9bfb7643cfbe708c960699e05fb918"}, +] + +[package.dependencies] +numpy = {version = ">=1.23.2", markers = "python_version >= \"3.11\""} +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.1" + +[package.extras] +all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"] +aws = ["s3fs (>=2022.05.0)"] +clipboard = ["PyQt5 (>=5.15.6)", "qtpy (>=2.2.0)"] +compression = ["zstandard (>=0.17.0)"] +computation = ["scipy (>=1.8.1)", "xarray (>=2022.03.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pyxlsb (>=1.0.9)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)"] +feather = ["pyarrow (>=7.0.0)"] +fss = ["fsspec (>=2022.05.0)"] +gcp = ["gcsfs (>=2022.05.0)", "pandas-gbq (>=0.17.5)"] +hdf5 = ["tables (>=3.7.0)"] +html = ["beautifulsoup4 (>=4.11.1)", "html5lib (>=1.1)", "lxml (>=4.8.0)"] +mysql = ["SQLAlchemy (>=1.4.36)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.8.10)"] +parquet = ["pyarrow (>=7.0.0)"] +performance = ["bottleneck (>=1.3.4)", "numba (>=0.55.2)", "numexpr (>=2.8.0)"] +plot = ["matplotlib (>=3.6.1)"] +postgresql = ["SQLAlchemy (>=1.4.36)", "psycopg2 (>=2.9.3)"] +spss = ["pyreadstat (>=1.1.5)"] +sql-other = ["SQLAlchemy (>=1.4.36)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.8.0)"] + +[[package]] +name = "pandas" +version = "2.1.1" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58d997dbee0d4b64f3cb881a24f918b5f25dd64ddf31f467bb9b67ae4c63a1e4"}, + {file = "pandas-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02304e11582c5d090e5a52aec726f31fe3f42895d6bfc1f28738f9b64b6f0614"}, + {file = "pandas-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffa8f0966de2c22de408d0e322db2faed6f6e74265aa0856f3824813cf124363"}, + {file = "pandas-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1f84c144dee086fe4f04a472b5cd51e680f061adf75c1ae4fc3a9275560f8f4"}, + {file = "pandas-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:75ce97667d06d69396d72be074f0556698c7f662029322027c226fd7a26965cb"}, + {file = "pandas-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:4c3f32fd7c4dccd035f71734df39231ac1a6ff95e8bdab8d891167197b7018d2"}, + {file = "pandas-2.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e2959720b70e106bb1d8b6eadd8ecd7c8e99ccdbe03ee03260877184bb2877d"}, + {file = "pandas-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:25e8474a8eb258e391e30c288eecec565bfed3e026f312b0cbd709a63906b6f8"}, + {file = "pandas-2.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8bd1685556f3374520466998929bade3076aeae77c3e67ada5ed2b90b4de7f0"}, + {file = "pandas-2.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc3657869c7902810f32bd072f0740487f9e030c1a3ab03e0af093db35a9d14e"}, + {file = "pandas-2.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:05674536bd477af36aa2effd4ec8f71b92234ce0cc174de34fd21e2ee99adbc2"}, + {file = "pandas-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:b407381258a667df49d58a1b637be33e514b07f9285feb27769cedb3ab3d0b3a"}, + {file = "pandas-2.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c747793c4e9dcece7bb20156179529898abf505fe32cb40c4052107a3c620b49"}, + {file = "pandas-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3bcad1e6fb34b727b016775bea407311f7721db87e5b409e6542f4546a4951ea"}, + {file = "pandas-2.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5ec7740f9ccb90aec64edd71434711f58ee0ea7f5ed4ac48be11cfa9abf7317"}, + {file = "pandas-2.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29deb61de5a8a93bdd033df328441a79fcf8dd3c12d5ed0b41a395eef9cd76f0"}, + {file = "pandas-2.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4f99bebf19b7e03cf80a4e770a3e65eee9dd4e2679039f542d7c1ace7b7b1daa"}, + {file = "pandas-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:84e7e910096416adec68075dc87b986ff202920fb8704e6d9c8c9897fe7332d6"}, + {file = "pandas-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:366da7b0e540d1b908886d4feb3d951f2f1e572e655c1160f5fde28ad4abb750"}, + {file = "pandas-2.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e50e72b667415a816ac27dfcfe686dc5a0b02202e06196b943d54c4f9c7693e"}, + {file = "pandas-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc1ab6a25da197f03ebe6d8fa17273126120874386b4ac11c1d687df288542dd"}, + {file = "pandas-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0dbfea0dd3901ad4ce2306575c54348d98499c95be01b8d885a2737fe4d7a98"}, + {file = "pandas-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0489b0e6aa3d907e909aef92975edae89b1ee1654db5eafb9be633b0124abe97"}, + {file = "pandas-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:4cdb0fab0400c2cb46dafcf1a0fe084c8bb2480a1fa8d81e19d15e12e6d4ded2"}, + {file = "pandas-2.1.1.tar.gz", hash = "sha256:fecb198dc389429be557cde50a2d46da8434a17fe37d7d41ff102e3987fd947b"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.1" + +[package.extras] +all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"] +aws = ["s3fs (>=2022.05.0)"] +clipboard = ["PyQt5 (>=5.15.6)", "qtpy (>=2.2.0)"] +compression = ["zstandard (>=0.17.0)"] +computation = ["scipy (>=1.8.1)", "xarray (>=2022.03.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pyxlsb (>=1.0.9)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)"] +feather = ["pyarrow (>=7.0.0)"] +fss = ["fsspec (>=2022.05.0)"] +gcp = ["gcsfs (>=2022.05.0)", "pandas-gbq (>=0.17.5)"] +hdf5 = ["tables (>=3.7.0)"] +html = ["beautifulsoup4 (>=4.11.1)", "html5lib (>=1.1)", "lxml (>=4.8.0)"] +mysql = ["SQLAlchemy (>=1.4.36)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.8.10)"] +parquet = ["pyarrow (>=7.0.0)"] +performance = ["bottleneck (>=1.3.4)", "numba (>=0.55.2)", "numexpr (>=2.8.0)"] +plot = ["matplotlib (>=3.6.1)"] +postgresql = ["SQLAlchemy (>=1.4.36)", "psycopg2 (>=2.9.3)"] +spss = ["pyreadstat (>=1.1.5)"] +sql-other = ["SQLAlchemy (>=1.4.36)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.8.0)"] + +[[package]] +name = "pefile" +version = "2023.2.7" +description = "Python PE parsing module" +optional = true +python-versions = ">=3.6.0" +files = [ + {file = "pefile-2023.2.7-py3-none-any.whl", hash = "sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6"}, + {file = "pefile-2023.2.7.tar.gz", hash = "sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc"}, +] + +[[package]] +name = "pip" +version = "23.3" +description = "The PyPA recommended tool for installing Python packages." +optional = true +python-versions = ">=3.7" +files = [ + {file = "pip-23.3-py3-none-any.whl", hash = "sha256:bc38bb52bc286514f8f7cb3a1ba5ed100b76aaef29b521d48574329331c5ae7b"}, + {file = "pip-23.3.tar.gz", hash = "sha256:bb7d4f69f488432e4e96394612f43ab43dd478d073ef7422604a570f7157561e"}, +] + +[[package]] +name = "plaso" +version = "20230717" +description = "Plaso (log2timeline) - Super timeline all the things" +optional = true +python-versions = "*" +files = [ + {file = "plaso-20230717.tar.gz", hash = "sha256:028f00eabd4e7824bab3fe592518a8a095cdca5b204c28792aacfdf1e3489a64"}, +] + +[package.dependencies] +acstore = ">=20230519" +artifacts = ">=20220219" +"bencode.py" = "*" +certifi = ">=2016.9.26" +cffi = ">=1.9.1" +cryptography = ">=2.0.2" +defusedxml = ">=0.5.0" +dfdatetime = ">=20221112" +dfvfs = ">=20230407" +dfwinreg = ">=20211207" +dtfabric = ">=20230518" +flor = ">=1.1.3" +future = ">=0.16.0" +libbde-python = ">=20220121" +libcaes-python = ">=20221127" +libcreg-python = ">=20200725" +libesedb-python = ">=20220806" +libevt-python = ">=20191104" +libevtx-python = ">=20220724" +libewf-python = ">=20131210" +libfsapfs-python = ">=20201107" +libfsext-python = ">=20220112" +libfsfat-python = ">=20220816" +libfshfs-python = ">=20220115" +libfsntfs-python = ">=20211229" +libfsxfs-python = ">=20220113" +libfvde-python = ">=20220121" +libfwnt-python = ">=20210717" +libfwsi-python = ">=20150606" +liblnk-python = ">=20230205" +libluksde-python = ">=20220121" +libmodi-python = ">=20210405" +libmsiecf-python = ">=20150314" +libolecf-python = ">=20151223" +libphdi-python = ">=20220110" +libqcow-python = ">=20201213" +libregf-python = ">=20201002" +libscca-python = ">=20190605" +libsigscan-python = ">=20230109" +libsmdev-python = ">=20140529" +libsmraw-python = ">=20140612" +libvhdi-python = ">=20201014" +libvmdk-python = ">=20140421" +libvsgpt-python = ">=20211115" +libvshadow-python = ">=20160109" +libvslvm-python = ">=20160109" +lz4 = ">=0.10.0" +opensearch-py = "*" +pefile = ">=2021.5.24" +pip = ">=7.0.0" +psutil = ">=5.4.3" +pyparsing = ">=2.4.2,<3.1.0" +python-dateutil = ">=1.5" +pytsk3 = ">=20210419" +pytz = "*" +pyxattr = {version = ">=0.7.2", markers = "platform_system != \"Windows\""} +PyYAML = ">=3.10" +pyzmq = ">=2.1.11" +redis = ">=3.4" +requests = ">=2.18.0" +six = ">=1.1.0" +XlsxWriter = ">=0.9.3" +yara-python = ">=3.4.0" + +[[package]] +name = "platformdirs" +version = "3.11.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, + {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, +] + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] + +[[package]] +name = "pluggy" +version = "1.3.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, + {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "portalocker" +version = "2.8.2" +description = "Wraps the portalocker recipe for easy usage" +optional = false +python-versions = ">=3.8" +files = [ + {file = "portalocker-2.8.2-py3-none-any.whl", hash = "sha256:cfb86acc09b9aa7c3b43594e19be1345b9d16af3feb08bf92f23d4dce513a28e"}, + {file = "portalocker-2.8.2.tar.gz", hash = "sha256:2b035aa7828e46c58e9b31390ee1f169b98e1066ab10b9a6a861fe7e25ee4f33"}, +] + +[package.dependencies] +pywin32 = {version = ">=226", markers = "platform_system == \"Windows\""} + +[package.extras] +docs = ["sphinx (>=1.7.1)"] +redis = ["redis"] +tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)", "types-redis"] + +[[package]] +name = "prometheus-client" +version = "0.17.1" +description = "Python client for the Prometheus monitoring system." +optional = false +python-versions = ">=3.6" +files = [ + {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"}, + {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"}, +] + +[package.extras] +twisted = ["twisted"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.39" +description = "Library for building powerful interactive command lines in Python" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, + {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "proto-plus" +version = "1.22.3" +description = "Beautiful, Pythonic protocol buffers." +optional = true +python-versions = ">=3.6" +files = [ + {file = "proto-plus-1.22.3.tar.gz", hash = "sha256:fdcd09713cbd42480740d2fe29c990f7fbd885a67efc328aa8be6ee3e9f76a6b"}, + {file = "proto_plus-1.22.3-py3-none-any.whl", hash = "sha256:a49cd903bc0b6ab41f76bf65510439d56ca76f868adf0274e738bfdd096894df"}, +] + +[package.dependencies] +protobuf = ">=3.19.0,<5.0.0dev" + +[package.extras] +testing = ["google-api-core[grpc] (>=1.31.5)"] + +[[package]] +name = "protobuf" +version = "3.20.3" +description = "Protocol Buffers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "protobuf-3.20.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:f4bd856d702e5b0d96a00ec6b307b0f51c1982c2bf9c0052cf9019e9a544ba99"}, + {file = "protobuf-3.20.3-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9aae4406ea63d825636cc11ffb34ad3379335803216ee3a856787bcf5ccc751e"}, + {file = "protobuf-3.20.3-cp310-cp310-win32.whl", hash = "sha256:28545383d61f55b57cf4df63eebd9827754fd2dc25f80c5253f9184235db242c"}, + {file = "protobuf-3.20.3-cp310-cp310-win_amd64.whl", hash = "sha256:67a3598f0a2dcbc58d02dd1928544e7d88f764b47d4a286202913f0b2801c2e7"}, + {file = "protobuf-3.20.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:899dc660cd599d7352d6f10d83c95df430a38b410c1b66b407a6b29265d66469"}, + {file = "protobuf-3.20.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64857f395505ebf3d2569935506ae0dfc4a15cb80dc25261176c784662cdcc4"}, + {file = "protobuf-3.20.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d9e4432ff660d67d775c66ac42a67cf2453c27cb4d738fc22cb53b5d84c135d4"}, + {file = "protobuf-3.20.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:74480f79a023f90dc6e18febbf7b8bac7508420f2006fabd512013c0c238f454"}, + {file = "protobuf-3.20.3-cp37-cp37m-win32.whl", hash = "sha256:b6cc7ba72a8850621bfec987cb72623e703b7fe2b9127a161ce61e61558ad905"}, + {file = "protobuf-3.20.3-cp37-cp37m-win_amd64.whl", hash = "sha256:8c0c984a1b8fef4086329ff8dd19ac77576b384079247c770f29cc8ce3afa06c"}, + {file = "protobuf-3.20.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:de78575669dddf6099a8a0f46a27e82a1783c557ccc38ee620ed8cc96d3be7d7"}, + {file = "protobuf-3.20.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f4c42102bc82a51108e449cbb32b19b180022941c727bac0cfd50170341f16ee"}, + {file = "protobuf-3.20.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:44246bab5dd4b7fbd3c0c80b6f16686808fab0e4aca819ade6e8d294a29c7050"}, + {file = "protobuf-3.20.3-cp38-cp38-win32.whl", hash = "sha256:c02ce36ec760252242a33967d51c289fd0e1c0e6e5cc9397e2279177716add86"}, + {file = "protobuf-3.20.3-cp38-cp38-win_amd64.whl", hash = "sha256:447d43819997825d4e71bf5769d869b968ce96848b6479397e29fc24c4a5dfe9"}, + {file = "protobuf-3.20.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:398a9e0c3eaceb34ec1aee71894ca3299605fa8e761544934378bbc6c97de23b"}, + {file = "protobuf-3.20.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf01b5720be110540be4286e791db73f84a2b721072a3711efff6c324cdf074b"}, + {file = "protobuf-3.20.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:daa564862dd0d39c00f8086f88700fdbe8bc717e993a21e90711acfed02f2402"}, + {file = "protobuf-3.20.3-cp39-cp39-win32.whl", hash = "sha256:819559cafa1a373b7096a482b504ae8a857c89593cf3a25af743ac9ecbd23480"}, + {file = "protobuf-3.20.3-cp39-cp39-win_amd64.whl", hash = "sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7"}, + {file = "protobuf-3.20.3-py2.py3-none-any.whl", hash = "sha256:a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db"}, + {file = "protobuf-3.20.3.tar.gz", hash = "sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2"}, +] + +[[package]] +name = "psq" +version = "0.8.0" +description = "A simple task queue using Google Cloud Pub/Sub" +optional = true +python-versions = "*" +files = [ + {file = "psq-0.8.0-py2.py3-none-any.whl", hash = "sha256:69608f691ecc5b8f0bfa633cf61d96db209342264d8f7d0833eda297a9cfe03c"}, + {file = "psq-0.8.0.tar.gz", hash = "sha256:c79de0aa7853799cb3dd06fa1b4076511aa9ec4e5db873a95001fc67abe8c381"}, +] + +[package.dependencies] +click = ">=4.0" +colorlog = ">=2.6.0,<3.0.0" +google-cloud-datastore = ">=1.0.0,<=2.0.0" +google-cloud-pubsub = ">=0.35.2" +werkzeug = ">=0.10.0,<1.0.0" + +[[package]] +name = "psutil" +version = "5.9.6" +description = "Cross-platform lib for process and system monitoring in Python." +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "psutil-5.9.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:fb8a697f11b0f5994550555fcfe3e69799e5b060c8ecf9e2f75c69302cc35c0d"}, + {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:91ecd2d9c00db9817a4b4192107cf6954addb5d9d67a969a4f436dbc9200f88c"}, + {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:10e8c17b4f898d64b121149afb136c53ea8b68c7531155147867b7b1ac9e7e28"}, + {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:18cd22c5db486f33998f37e2bb054cc62fd06646995285e02a51b1e08da97017"}, + {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:ca2780f5e038379e520281e4c032dddd086906ddff9ef0d1b9dcf00710e5071c"}, + {file = "psutil-5.9.6-cp27-none-win32.whl", hash = "sha256:70cb3beb98bc3fd5ac9ac617a327af7e7f826373ee64c80efd4eb2856e5051e9"}, + {file = "psutil-5.9.6-cp27-none-win_amd64.whl", hash = "sha256:51dc3d54607c73148f63732c727856f5febec1c7c336f8f41fcbd6315cce76ac"}, + {file = "psutil-5.9.6-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c69596f9fc2f8acd574a12d5f8b7b1ba3765a641ea5d60fb4736bf3c08a8214a"}, + {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92e0cc43c524834af53e9d3369245e6cc3b130e78e26100d1f63cdb0abeb3d3c"}, + {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:748c9dd2583ed86347ed65d0035f45fa8c851e8d90354c122ab72319b5f366f4"}, + {file = "psutil-5.9.6-cp36-cp36m-win32.whl", hash = "sha256:3ebf2158c16cc69db777e3c7decb3c0f43a7af94a60d72e87b2823aebac3d602"}, + {file = "psutil-5.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:ff18b8d1a784b810df0b0fff3bcb50ab941c3b8e2c8de5726f9c71c601c611aa"}, + {file = "psutil-5.9.6-cp37-abi3-win32.whl", hash = "sha256:a6f01f03bf1843280f4ad16f4bde26b817847b4c1a0db59bf6419807bc5ce05c"}, + {file = "psutil-5.9.6-cp37-abi3-win_amd64.whl", hash = "sha256:6e5fb8dc711a514da83098bc5234264e551ad980cec5f85dabf4d38ed6f15e9a"}, + {file = "psutil-5.9.6-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:daecbcbd29b289aac14ece28eca6a3e60aa361754cf6da3dfb20d4d32b6c7f57"}, + {file = "psutil-5.9.6.tar.gz", hash = "sha256:e4b92ddcd7dd4cdd3f900180ea1e104932c7bce234fb88976e2a3b296441225a"}, +] + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + +[[package]] +name = "psycopg2-binary" +version = "2.9.9" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +optional = true +python-versions = ">=3.7" +files = [ + {file = "psycopg2-binary-2.9.9.tar.gz", hash = "sha256:7f01846810177d829c7692f1f5ada8096762d9172af1b1a28d4ab5b77c923c1c"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c2470da5418b76232f02a2fcd2229537bb2d5a7096674ce61859c3229f2eb202"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6af2a6d4b7ee9615cbb162b0738f6e1fd1f5c3eda7e5da17861eacf4c717ea7"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75723c3c0fbbf34350b46a3199eb50638ab22a0228f93fb472ef4d9becc2382b"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83791a65b51ad6ee6cf0845634859d69a038ea9b03d7b26e703f94c7e93dbcf9"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ef4854e82c09e84cc63084a9e4ccd6d9b154f1dbdd283efb92ecd0b5e2b8c84"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed1184ab8f113e8d660ce49a56390ca181f2981066acc27cf637d5c1e10ce46e"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d2997c458c690ec2bc6b0b7ecbafd02b029b7b4283078d3b32a852a7ce3ddd98"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b58b4710c7f4161b5e9dcbe73bb7c62d65670a87df7bcce9e1faaad43e715245"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0c009475ee389757e6e34611d75f6e4f05f0cf5ebb76c6037508318e1a1e0d7e"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8dbf6d1bc73f1d04ec1734bae3b4fb0ee3cb2a493d35ede9badbeb901fb40f6f"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-win32.whl", hash = "sha256:3f78fd71c4f43a13d342be74ebbc0666fe1f555b8837eb113cb7416856c79682"}, + {file = "psycopg2_binary-2.9.9-cp310-cp310-win_amd64.whl", hash = "sha256:876801744b0dee379e4e3c38b76fc89f88834bb15bf92ee07d94acd06ec890a0"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ee825e70b1a209475622f7f7b776785bd68f34af6e7a46e2e42f27b659b5bc26"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1ea665f8ce695bcc37a90ee52de7a7980be5161375d42a0b6c6abedbf0d81f0f"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:143072318f793f53819048fdfe30c321890af0c3ec7cb1dfc9cc87aa88241de2"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c332c8d69fb64979ebf76613c66b985414927a40f8defa16cf1bc028b7b0a7b0"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7fc5a5acafb7d6ccca13bfa8c90f8c51f13d8fb87d95656d3950f0158d3ce53"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:977646e05232579d2e7b9c59e21dbe5261f403a88417f6a6512e70d3f8a046be"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b6356793b84728d9d50ead16ab43c187673831e9d4019013f1402c41b1db9b27"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bc7bb56d04601d443f24094e9e31ae6deec9ccb23581f75343feebaf30423359"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:77853062a2c45be16fd6b8d6de2a99278ee1d985a7bd8b103e97e41c034006d2"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:78151aa3ec21dccd5cdef6c74c3e73386dcdfaf19bced944169697d7ac7482fc"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-win32.whl", hash = "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d"}, + {file = "psycopg2_binary-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e6f98446430fdf41bd36d4faa6cb409f5140c1c2cf58ce0bbdaf16af7d3f119"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c77e3d1862452565875eb31bdb45ac62502feabbd53429fdc39a1cc341d681ba"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8359bf4791968c5a78c56103702000105501adb557f3cf772b2c207284273984"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:275ff571376626195ab95a746e6a04c7df8ea34638b99fc11160de91f2fef503"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f9b5571d33660d5009a8b3c25dc1db560206e2d2f89d3df1cb32d72c0d117d52"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:420f9bbf47a02616e8554e825208cb947969451978dceb77f95ad09c37791dae"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4154ad09dac630a0f13f37b583eae260c6aa885d67dfbccb5b02c33f31a6d420"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a148c5d507bb9b4f2030a2025c545fccb0e1ef317393eaba42e7eabd28eb6041"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-win32.whl", hash = "sha256:68fc1f1ba168724771e38bee37d940d2865cb0f562380a1fb1ffb428b75cb692"}, + {file = "psycopg2_binary-2.9.9-cp37-cp37m-win_amd64.whl", hash = "sha256:281309265596e388ef483250db3640e5f414168c5a67e9c665cafce9492eda2f"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:60989127da422b74a04345096c10d416c2b41bd7bf2a380eb541059e4e999980"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:246b123cc54bb5361588acc54218c8c9fb73068bf227a4a531d8ed56fa3ca7d6"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34eccd14566f8fe14b2b95bb13b11572f7c7d5c36da61caf414d23b91fcc5d94"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18d0ef97766055fec15b5de2c06dd8e7654705ce3e5e5eed3b6651a1d2a9a152"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3f82c171b4ccd83bbaf35aa05e44e690113bd4f3b7b6cc54d2219b132f3ae55"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ead20f7913a9c1e894aebe47cccf9dc834e1618b7aa96155d2091a626e59c972"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ca49a8119c6cbd77375ae303b0cfd8c11f011abbbd64601167ecca18a87e7cdd"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:323ba25b92454adb36fa425dc5cf6f8f19f78948cbad2e7bc6cdf7b0d7982e59"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:1236ed0952fbd919c100bc839eaa4a39ebc397ed1c08a97fc45fee2a595aa1b3"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:729177eaf0aefca0994ce4cffe96ad3c75e377c7b6f4efa59ebf003b6d398716"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-win32.whl", hash = "sha256:804d99b24ad523a1fe18cc707bf741670332f7c7412e9d49cb5eab67e886b9b5"}, + {file = "psycopg2_binary-2.9.9-cp38-cp38-win_amd64.whl", hash = "sha256:a6cdcc3ede532f4a4b96000b6362099591ab4a3e913d70bcbac2b56c872446f7"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:72dffbd8b4194858d0941062a9766f8297e8868e1dd07a7b36212aaa90f49472"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:30dcc86377618a4c8f3b72418df92e77be4254d8f89f14b8e8f57d6d43603c0f"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31a34c508c003a4347d389a9e6fcc2307cc2150eb516462a7a17512130de109e"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15208be1c50b99203fe88d15695f22a5bed95ab3f84354c494bcb1d08557df67"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1873aade94b74715be2246321c8650cabf5a0d098a95bab81145ffffa4c13876"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a58c98a7e9c021f357348867f537017057c2ed7f77337fd914d0bedb35dace7"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4686818798f9194d03c9129a4d9a702d9e113a89cb03bffe08c6cf799e053291"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ebdc36bea43063116f0486869652cb2ed7032dbc59fbcb4445c4862b5c1ecf7f"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:ca08decd2697fdea0aea364b370b1249d47336aec935f87b8bbfd7da5b2ee9c1"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ac05fb791acf5e1a3e39402641827780fe44d27e72567a000412c648a85ba860"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-win32.whl", hash = "sha256:9dba73be7305b399924709b91682299794887cbbd88e38226ed9f6712eabee90"}, + {file = "psycopg2_binary-2.9.9-cp39-cp39-win_amd64.whl", hash = "sha256:f7ae5d65ccfbebdfa761585228eb4d0df3a8b15cfb53bd953e713e09fbb12957"}, +] + +[[package]] +name = "puremagic" +version = "1.15" +description = "Pure python implementation of magic file detection" +optional = true +python-versions = "*" +files = [ + {file = "puremagic-1.15-py3-none-any.whl", hash = "sha256:349e179f04bcc14eb0e2c3941cd9ee4ea74881ab6ccac63ea0c37c98f7a80b22"}, + {file = "puremagic-1.15.tar.gz", hash = "sha256:6e46aa78113a466abc9f69e6e8a4ce90eb57d908dafb809597012621061462bd"}, +] + +[[package]] +name = "pyasn1" +version = "0.5.0" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, + {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"}, +] + +[[package]] +name = "pyasn1-modules" +version = "0.3.0" +description = "A collection of ASN.1-based protocols modules" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "pyasn1_modules-0.3.0-py2.py3-none-any.whl", hash = "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d"}, + {file = "pyasn1_modules-0.3.0.tar.gz", hash = "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c"}, +] + +[package.dependencies] +pyasn1 = ">=0.4.6,<0.6.0" + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] + +[[package]] +name = "pycryptodome" +version = "3.19.0" +description = "Cryptographic library for Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "pycryptodome-3.19.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3006c44c4946583b6de24fe0632091c2653d6256b99a02a3db71ca06472ea1e4"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:7c760c8a0479a4042111a8dd2f067d3ae4573da286c53f13cf6f5c53a5c1f631"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:08ce3558af5106c632baf6d331d261f02367a6bc3733086ae43c0f988fe042db"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45430dfaf1f421cf462c0dd824984378bef32b22669f2635cb809357dbaab405"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:a9bcd5f3794879e91970f2bbd7d899780541d3ff439d8f2112441769c9f2ccea"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-win32.whl", hash = "sha256:190c53f51e988dceb60472baddce3f289fa52b0ec38fbe5fd20dd1d0f795c551"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-win_amd64.whl", hash = "sha256:22e0ae7c3a7f87dcdcf302db06ab76f20e83f09a6993c160b248d58274473bfa"}, + {file = "pycryptodome-3.19.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:7822f36d683f9ad7bc2145b2c2045014afdbbd1d9922a6d4ce1cbd6add79a01e"}, + {file = "pycryptodome-3.19.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:05e33267394aad6db6595c0ce9d427fe21552f5425e116a925455e099fdf759a"}, + {file = "pycryptodome-3.19.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:829b813b8ee00d9c8aba417621b94bc0b5efd18c928923802ad5ba4cf1ec709c"}, + {file = "pycryptodome-3.19.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:fc7a79590e2b5d08530175823a242de6790abc73638cc6dc9d2684e7be2f5e49"}, + {file = "pycryptodome-3.19.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:542f99d5026ac5f0ef391ba0602f3d11beef8e65aae135fa5b762f5ebd9d3bfb"}, + {file = "pycryptodome-3.19.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:61bb3ccbf4bf32ad9af32da8badc24e888ae5231c617947e0f5401077f8b091f"}, + {file = "pycryptodome-3.19.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d49a6c715d8cceffedabb6adb7e0cbf41ae1a2ff4adaeec9432074a80627dea1"}, + {file = "pycryptodome-3.19.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e249a784cc98a29c77cea9df54284a44b40cafbfae57636dd2f8775b48af2434"}, + {file = "pycryptodome-3.19.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d033947e7fd3e2ba9a031cb2d267251620964705a013c5a461fa5233cc025270"}, + {file = "pycryptodome-3.19.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:84c3e4fffad0c4988aef0d5591be3cad4e10aa7db264c65fadbc633318d20bde"}, + {file = "pycryptodome-3.19.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:139ae2c6161b9dd5d829c9645d781509a810ef50ea8b657e2257c25ca20efe33"}, + {file = "pycryptodome-3.19.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:5b1986c761258a5b4332a7f94a83f631c1ffca8747d75ab8395bf2e1b93283d9"}, + {file = "pycryptodome-3.19.0-cp35-abi3-win32.whl", hash = "sha256:536f676963662603f1f2e6ab01080c54d8cd20f34ec333dcb195306fa7826997"}, + {file = "pycryptodome-3.19.0-cp35-abi3-win_amd64.whl", hash = "sha256:04dd31d3b33a6b22ac4d432b3274588917dcf850cc0c51c84eca1d8ed6933810"}, + {file = "pycryptodome-3.19.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:8999316e57abcbd8085c91bc0ef75292c8618f41ca6d2b6132250a863a77d1e7"}, + {file = "pycryptodome-3.19.0-pp27-pypy_73-win32.whl", hash = "sha256:a0ab84755f4539db086db9ba9e9f3868d2e3610a3948cbd2a55e332ad83b01b0"}, + {file = "pycryptodome-3.19.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0101f647d11a1aae5a8ce4f5fad6644ae1b22bb65d05accc7d322943c69a74a6"}, + {file = "pycryptodome-3.19.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c1601e04d32087591d78e0b81e1e520e57a92796089864b20e5f18c9564b3fa"}, + {file = "pycryptodome-3.19.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:506c686a1eee6c00df70010be3b8e9e78f406af4f21b23162bbb6e9bdf5427bc"}, + {file = "pycryptodome-3.19.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7919ccd096584b911f2a303c593280869ce1af9bf5d36214511f5e5a1bed8c34"}, + {file = "pycryptodome-3.19.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:560591c0777f74a5da86718f70dfc8d781734cf559773b64072bbdda44b3fc3e"}, + {file = "pycryptodome-3.19.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1cc2f2ae451a676def1a73c1ae9120cd31af25db3f381893d45f75e77be2400"}, + {file = "pycryptodome-3.19.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:17940dcf274fcae4a54ec6117a9ecfe52907ed5e2e438fe712fe7ca502672ed5"}, + {file = "pycryptodome-3.19.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d04f5f623a280fbd0ab1c1d8ecbd753193ab7154f09b6161b0f857a1a676c15f"}, + {file = "pycryptodome-3.19.0.tar.gz", hash = "sha256:bc35d463222cdb4dbebd35e0784155c81e161b9284e567e7e933d722e533331e"}, +] + +[[package]] +name = "pycryptodomex" +version = "3.19.0" +description = "Cryptographic library for Python" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "pycryptodomex-3.19.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ff64fd720def623bf64d8776f8d0deada1cc1bf1ec3c1f9d6f5bb5bd098d034f"}, + {file = "pycryptodomex-3.19.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:61056a1fd3254f6f863de94c233b30dd33bc02f8c935b2000269705f1eeeffa4"}, + {file = "pycryptodomex-3.19.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:258c4233a3fe5a6341780306a36c6fb072ef38ce676a6d41eec3e591347919e8"}, + {file = "pycryptodomex-3.19.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e45bb4635b3c4e0a00ca9df75ef6295838c85c2ac44ad882410cb631ed1eeaa"}, + {file = "pycryptodomex-3.19.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:a12144d785518f6491ad334c75ccdc6ad52ea49230b4237f319dbb7cef26f464"}, + {file = "pycryptodomex-3.19.0-cp27-cp27m-win32.whl", hash = "sha256:1789d89f61f70a4cd5483d4dfa8df7032efab1118f8b9894faae03c967707865"}, + {file = "pycryptodomex-3.19.0-cp27-cp27m-win_amd64.whl", hash = "sha256:eb2fc0ec241bf5e5ef56c8fbec4a2634d631e4c4f616a59b567947a0f35ad83c"}, + {file = "pycryptodomex-3.19.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:c9a68a2f7bd091ccea54ad3be3e9d65eded813e6d79fdf4cc3604e26cdd6384f"}, + {file = "pycryptodomex-3.19.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:8df69e41f7e7015a90b94d1096ec3d8e0182e73449487306709ec27379fff761"}, + {file = "pycryptodomex-3.19.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:917033016ecc23c8933205585a0ab73e20020fdf671b7cd1be788a5c4039840b"}, + {file = "pycryptodomex-3.19.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:e8e5ecbd4da4157889fce8ba49da74764dd86c891410bfd6b24969fa46edda51"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:a77b79852175064c822b047fee7cf5a1f434f06ad075cc9986aa1c19a0c53eb0"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:5b883e1439ab63af976656446fb4839d566bb096f15fc3c06b5a99cde4927188"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3866d68e2fc345162b1b9b83ef80686acfe5cec0d134337f3b03950a0a8bf56"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c74eb1f73f788facece7979ce91594dc177e1a9b5d5e3e64697dd58299e5cb4d"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7cb51096a6a8d400724104db8a7e4f2206041a1f23e58924aa3d8d96bcb48338"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a588a1cb7781da9d5e1c84affd98c32aff9c89771eac8eaa659d2760666f7139"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:d4dd3b381ff5a5907a3eb98f5f6d32c64d319a840278ceea1dcfcc65063856f3"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:263de9a96d2fcbc9f5bd3a279f14ea0d5f072adb68ebd324987576ec25da084d"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-win32.whl", hash = "sha256:67c8eb79ab33d0fbcb56842992298ddb56eb6505a72369c20f60bc1d2b6fb002"}, + {file = "pycryptodomex-3.19.0-cp35-abi3-win_amd64.whl", hash = "sha256:09c9401dc06fb3d94cb1ec23b4ea067a25d1f4c6b7b118ff5631d0b5daaab3cc"}, + {file = "pycryptodomex-3.19.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:edbe083c299835de7e02c8aa0885cb904a75087d35e7bab75ebe5ed336e8c3e2"}, + {file = "pycryptodomex-3.19.0-pp27-pypy_73-win32.whl", hash = "sha256:136b284e9246b4ccf4f752d435c80f2c44fc2321c198505de1d43a95a3453b3c"}, + {file = "pycryptodomex-3.19.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5d73e9fa3fe830e7b6b42afc49d8329b07a049a47d12e0ef9225f2fd220f19b2"}, + {file = "pycryptodomex-3.19.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b2f1982c5bc311f0aab8c293524b861b485d76f7c9ab2c3ac9a25b6f7655975"}, + {file = "pycryptodomex-3.19.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfb040b5dda1dff1e197d2ef71927bd6b8bfcb9793bc4dfe0bb6df1e691eaacb"}, + {file = "pycryptodomex-3.19.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:800a2b05cfb83654df80266692f7092eeefe2a314fa7901dcefab255934faeec"}, + {file = "pycryptodomex-3.19.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c01678aee8ac0c1a461cbc38ad496f953f9efcb1fa19f5637cbeba7544792a53"}, + {file = "pycryptodomex-3.19.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2126bc54beccbede6eade00e647106b4f4c21e5201d2b0a73e9e816a01c50905"}, + {file = "pycryptodomex-3.19.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b801216c48c0886742abf286a9a6b117e248ca144d8ceec1f931ce2dd0c9cb40"}, + {file = "pycryptodomex-3.19.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:50cb18d4dd87571006fd2447ccec85e6cec0136632a550aa29226ba075c80644"}, + {file = "pycryptodomex-3.19.0.tar.gz", hash = "sha256:af83a554b3f077564229865c45af0791be008ac6469ef0098152139e6bd4b5b6"}, +] + +[[package]] +name = "pydantic" +version = "1.10.13" +description = "Data validation and settings management using python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-1.10.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737"}, + {file = "pydantic-1.10.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17"}, + {file = "pydantic-1.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0"}, + {file = "pydantic-1.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0"}, + {file = "pydantic-1.10.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f"}, + {file = "pydantic-1.10.13-cp37-cp37m-win_amd64.whl", hash = "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953"}, + {file = "pydantic-1.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d"}, + {file = "pydantic-1.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d"}, + {file = "pydantic-1.10.13-py3-none-any.whl", hash = "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687"}, + {file = "pydantic-1.10.13.tar.gz", hash = "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340"}, +] + +[package.dependencies] +typing-extensions = ">=4.2.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + +[[package]] +name = "pyhindsight" +version = "20230327.0" +description = "Browser forensics for Google Chrome/Chromium" +optional = true +python-versions = ">=3.8" +files = [ + {file = "pyhindsight-20230327.0-py3-none-any.whl", hash = "sha256:65bcd250b8ff0a32f5fd360a62e2d3fa2b9dbbe461bd9c15300b60ce7e13879d"}, + {file = "pyhindsight-20230327.0-py3-none-win32.whl", hash = "sha256:f2ac1279def87f8e44804c2b530c3f58caaf0145a017d436ce732a98f6bc2cf5"}, +] + +[package.dependencies] +bottle = ">=0.12.18" +keyring = ">=21.2.1" +puremagic = ">=1.11" +pycryptodomex = ">=3.9.7" +pytz = ">=2021.3" +xlsxwriter = ">=3.0.1" + +[[package]] +name = "pyjwt" +version = "2.8.0" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, + {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, +] + +[package.dependencies] +cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"crypto\""} + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + +[[package]] +name = "pyopenssl" +version = "23.2.0" +description = "Python wrapper module around the OpenSSL library" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyOpenSSL-23.2.0-py3-none-any.whl", hash = "sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2"}, + {file = "pyOpenSSL-23.2.0.tar.gz", hash = "sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac"}, +] + +[package.dependencies] +cryptography = ">=38.0.0,<40.0.0 || >40.0.0,<40.0.1 || >40.0.1,<42" + +[package.extras] +docs = ["sphinx (!=5.2.0,!=5.2.0.post0)", "sphinx-rtd-theme"] +test = ["flaky", "pretend", "pytest (>=3.0.1)"] + +[[package]] +name = "pyparsing" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pytest" +version = "7.4.2" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, + {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-dotenv" +version = "1.0.0" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, + {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "python-multipart" +version = "0.0.6" +description = "A streaming multipart parser for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "python_multipart-0.0.6-py3-none-any.whl", hash = "sha256:ee698bab5ef148b0a760751c261902cd096e57e10558e11aca17646b74ee1c18"}, + {file = "python_multipart-0.0.6.tar.gz", hash = "sha256:e9925a80bb668529f1b67c7fdb0a5dacdd7cbfc6fb0bff3ea443fe22bdd62132"}, +] + +[package.extras] +dev = ["atomicwrites (==1.2.1)", "attrs (==19.2.0)", "coverage (==6.5.0)", "hatch", "invoke (==1.7.3)", "more-itertools (==4.3.0)", "pbr (==4.3.0)", "pluggy (==1.0.0)", "py (==1.11.0)", "pytest (==7.2.0)", "pytest-cov (==4.0.0)", "pytest-timeout (==2.1.0)", "pyyaml (==5.1)"] + +[[package]] +name = "pytsk3" +version = "20231007" +description = "Python bindings for the SleuthKit" +optional = true +python-versions = ">=3.7" +files = [ + {file = "pytsk3-20231007.tar.gz", hash = "sha256:b8f139cad2e3facbff7e9d40623c0876b1cb45053f1159c3650106c1c2ba4ff8"}, +] + +[[package]] +name = "pytz" +version = "2023.3.post1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, +] + +[[package]] +name = "pywin32" +version = "306" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, +] + +[[package]] +name = "pywin32-ctypes" +version = "0.2.2" +description = "A (partial) reimplementation of pywin32 using ctypes/cffi" +optional = true +python-versions = ">=3.6" +files = [ + {file = "pywin32-ctypes-0.2.2.tar.gz", hash = "sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60"}, + {file = "pywin32_ctypes-0.2.2-py3-none-any.whl", hash = "sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7"}, +] + +[[package]] +name = "pyxattr" +version = "0.8.1" +description = "Filesystem extended attributes for python" +optional = true +python-versions = ">=3.7" +files = [ + {file = "pyxattr-0.8.1.tar.gz", hash = "sha256:48c578ecf8ea0bd4351b1752470e301a90a3761c7c21f00f953dcf6d6fa6ee5a"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "pyzmq" +version = "25.1.1" +description = "Python bindings for 0MQ" +optional = true +python-versions = ">=3.6" +files = [ + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"}, + {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"}, + {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"}, + {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"}, + {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"}, + {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"}, + {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"}, + {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"}, + {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"}, + {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"}, + {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"}, + {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"}, +] + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "redis" +version = "4.4.4" +description = "Python client for Redis database and key-value store" +optional = false +python-versions = ">=3.7" +files = [ + {file = "redis-4.4.4-py3-none-any.whl", hash = "sha256:da92a39fec86438d3f1e2a1db33c312985806954fe860120b582a8430e231d8f"}, + {file = "redis-4.4.4.tar.gz", hash = "sha256:68226f7ede928db8302f29ab088a157f41061fa946b7ae865452b6d7838bbffb"}, +] + +[package.dependencies] +async-timeout = ">=4.0.2" + +[package.extras] +hiredis = ["hiredis (>=1.0.0)"] +ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "requests-oauthlib" +version = "1.3.1" +description = "OAuthlib authentication support for Requests." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"}, + {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"}, +] + +[package.dependencies] +oauthlib = ">=3.0.0" +requests = ">=2.0.0" + +[package.extras] +rsa = ["oauthlib[signedtoken] (>=3.0.0)"] + +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +optional = false +python-versions = ">=3.6,<4" +files = [ + {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, + {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, +] + +[package.dependencies] +pyasn1 = ">=0.1.3" + +[[package]] +name = "s3transfer" +version = "0.7.0" +description = "An Amazon S3 Transfer Manager" +optional = false +python-versions = ">= 3.7" +files = [ + {file = "s3transfer-0.7.0-py3-none-any.whl", hash = "sha256:10d6923c6359175f264811ef4bf6161a3156ce8e350e705396a7557d6293c33a"}, + {file = "s3transfer-0.7.0.tar.gz", hash = "sha256:fd3889a66f5fe17299fe75b82eae6cf722554edca744ca5d5fe308b104883d2e"}, +] + +[package.dependencies] +botocore = ">=1.12.36,<2.0a.0" + +[package.extras] +crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] + +[[package]] +name = "secretstorage" +version = "3.3.3" +description = "Python bindings to FreeDesktop.org Secret Service API" +optional = true +python-versions = ">=3.6" +files = [ + {file = "SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99"}, + {file = "SecretStorage-3.3.3.tar.gz", hash = "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77"}, +] + +[package.dependencies] +cryptography = ">=2.0" +jeepney = ">=0.6" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] + +[[package]] +name = "sortedcontainers" +version = "2.4.0" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +optional = false +python-versions = "*" +files = [ + {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, + {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +] + +[[package]] +name = "sshpubkeys" +version = "3.3.1" +description = "SSH public key parser" +optional = false +python-versions = ">=3" +files = [ + {file = "sshpubkeys-3.3.1-py2.py3-none-any.whl", hash = "sha256:946f76b8fe86704b0e7c56a00d80294e39bc2305999844f079a217885060b1ac"}, + {file = "sshpubkeys-3.3.1.tar.gz", hash = "sha256:3020ed4f8c846849299370fbe98ff4157b0ccc1accec105e07cfa9ae4bb55064"}, +] + +[package.dependencies] +cryptography = ">=2.1.4" +ecdsa = ">=0.13" + +[package.extras] +dev = ["twine", "wheel", "yapf"] + +[[package]] +name = "starlette" +version = "0.27.0" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.7" +files = [ + {file = "starlette-0.27.0-py3-none-any.whl", hash = "sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91"}, + {file = "starlette-0.27.0.tar.gz", hash = "sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] + +[[package]] +name = "tabulate" +version = "0.9.0" +description = "Pretty-print tabular data" +optional = true +python-versions = ">=3.7" +files = [ + {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, + {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, +] + +[package.extras] +widechars = ["wcwidth"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "typing-extensions" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, +] + +[[package]] +name = "typing-inspect" +version = "0.9.0" +description = "Runtime inspection utilities for typing module." +optional = true +python-versions = "*" +files = [ + {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, + {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, +] + +[package.dependencies] +mypy-extensions = ">=0.3.0" +typing-extensions = ">=3.7.4" + +[[package]] +name = "tzdata" +version = "2023.3" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, + {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, +] + +[[package]] +name = "ujson" +version = "5.8.0" +description = "Ultra fast JSON encoder and decoder for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "ujson-5.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1"}, + {file = "ujson-5.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75"}, + {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76"}, + {file = "ujson-5.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a"}, + {file = "ujson-5.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7"}, + {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2"}, + {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba"}, + {file = "ujson-5.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf"}, + {file = "ujson-5.8.0-cp310-cp310-win32.whl", hash = "sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a"}, + {file = "ujson-5.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0"}, + {file = "ujson-5.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f"}, + {file = "ujson-5.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8"}, + {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405"}, + {file = "ujson-5.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4"}, + {file = "ujson-5.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e"}, + {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3"}, + {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5"}, + {file = "ujson-5.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa"}, + {file = "ujson-5.8.0-cp311-cp311-win32.whl", hash = "sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879"}, + {file = "ujson-5.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721"}, + {file = "ujson-5.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c"}, + {file = "ujson-5.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6"}, + {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae"}, + {file = "ujson-5.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b"}, + {file = "ujson-5.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296"}, + {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7"}, + {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08"}, + {file = "ujson-5.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30"}, + {file = "ujson-5.8.0-cp312-cp312-win32.whl", hash = "sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916"}, + {file = "ujson-5.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6"}, + {file = "ujson-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb"}, + {file = "ujson-5.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b"}, + {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582"}, + {file = "ujson-5.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c"}, + {file = "ujson-5.8.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7"}, + {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67"}, + {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9"}, + {file = "ujson-5.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07"}, + {file = "ujson-5.8.0-cp38-cp38-win32.whl", hash = "sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564"}, + {file = "ujson-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5"}, + {file = "ujson-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c"}, + {file = "ujson-5.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a"}, + {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207"}, + {file = "ujson-5.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042"}, + {file = "ujson-5.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3"}, + {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95"}, + {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c"}, + {file = "ujson-5.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc"}, + {file = "ujson-5.8.0-cp39-cp39-win32.whl", hash = "sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903"}, + {file = "ujson-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3"}, + {file = "ujson-5.8.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec"}, + {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282"}, + {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83"}, + {file = "ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c"}, + {file = "ujson-5.8.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109"}, + {file = "ujson-5.8.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377"}, + {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f"}, + {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130"}, + {file = "ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f"}, + {file = "ujson-5.8.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94"}, + {file = "ujson-5.8.0.tar.gz", hash = "sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425"}, +] + +[[package]] +name = "uritemplate" +version = "4.1.1" +description = "Implementation of RFC 6570 URI Templates" +optional = false +python-versions = ">=3.6" +files = [ + {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, + {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, +] + +[[package]] +name = "urllib3" +version = "1.26.18" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, + {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, +] + +[package.extras] +brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "uvicorn" +version = "0.23.2" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.8" +files = [ + {file = "uvicorn-0.23.2-py3-none-any.whl", hash = "sha256:1f9be6558f01239d4fdf22ef8126c39cb1ad0addf76c40e760549d2c2f43ab53"}, + {file = "uvicorn-0.23.2.tar.gz", hash = "sha256:4d3cc12d7727ba72b64d12d3cc7743124074c0a69f7b201512fc50c3e3f1569a"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} +h11 = ">=0.8" +httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""} +python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} +typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} +uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""} +watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] + +[[package]] +name = "uvloop" +version = "0.18.0" +description = "Fast implementation of asyncio event loop on top of libuv" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "uvloop-0.18.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1f354d669586fca96a9a688c585b6257706d216177ac457c92e15709acaece10"}, + {file = "uvloop-0.18.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:280904236a5b333a273292b3bcdcbfe173690f69901365b973fa35be302d7781"}, + {file = "uvloop-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad79cd30c7e7484bdf6e315f3296f564b3ee2f453134a23ffc80d00e63b3b59e"}, + {file = "uvloop-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99deae0504547d04990cc5acf631d9f490108c3709479d90c1dcd14d6e7af24d"}, + {file = "uvloop-0.18.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:edbb4de38535f42f020da1e3ae7c60f2f65402d027a08a8c60dc8569464873a6"}, + {file = "uvloop-0.18.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:54b211c46facb466726b227f350792770fc96593c4ecdfaafe20dc00f3209aef"}, + {file = "uvloop-0.18.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:25b714f07c68dcdaad6994414f6ec0f2a3b9565524fba181dcbfd7d9598a3e73"}, + {file = "uvloop-0.18.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1121087dfeb46e9e65920b20d1f46322ba299b8d93f7cb61d76c94b5a1adc20c"}, + {file = "uvloop-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74020ef8061678e01a40c49f1716b4f4d1cc71190d40633f08a5ef8a7448a5c6"}, + {file = "uvloop-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f4a549cd747e6f4f8446f4b4c8cb79504a8372d5d3a9b4fc20e25daf8e76c05"}, + {file = "uvloop-0.18.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6132318e1ab84a626639b252137aa8d031a6c0550250460644c32ed997604088"}, + {file = "uvloop-0.18.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:585b7281f9ea25c4a5fa993b1acca4ad3d8bc3f3fe2e393f0ef51b6c1bcd2fe6"}, + {file = "uvloop-0.18.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:61151cc207cf5fc88863e50de3d04f64ee0fdbb979d0b97caf21cae29130ed78"}, + {file = "uvloop-0.18.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c65585ae03571b73907b8089473419d8c0aff1e3826b3bce153776de56cbc687"}, + {file = "uvloop-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3d301e23984dcbc92d0e42253e0e0571915f0763f1eeaf68631348745f2dccc"}, + {file = "uvloop-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:680da98f12a7587f76f6f639a8aa7708936a5d17c5e7db0bf9c9d9cbcb616593"}, + {file = "uvloop-0.18.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:75baba0bfdd385c886804970ae03f0172e0d51e51ebd191e4df09b929771b71e"}, + {file = "uvloop-0.18.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ed3c28337d2fefc0bac5705b9c66b2702dc392f2e9a69badb1d606e7e7f773bb"}, + {file = "uvloop-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8849b8ef861431543c07112ad8436903e243cdfa783290cbee3df4ce86d8dd48"}, + {file = "uvloop-0.18.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:211ce38d84118ae282a91408f61b85cf28e2e65a0a8966b9a97e0e9d67c48722"}, + {file = "uvloop-0.18.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0a8f706b943c198dcedf1f2fb84899002c195c24745e47eeb8f2fb340f7dfc3"}, + {file = "uvloop-0.18.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:58e44650cbc8607a218caeece5a689f0a2d10be084a69fc32f7db2e8f364927c"}, + {file = "uvloop-0.18.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b8b7cf7806bdc745917f84d833f2144fabcc38e9cd854e6bc49755e3af2b53e"}, + {file = "uvloop-0.18.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:56c1026a6b0d12b378425e16250acb7d453abaefe7a2f5977143898db6cfe5bd"}, + {file = "uvloop-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:12af0d2e1b16780051d27c12de7e419b9daeb3516c503ab3e98d364cc55303bb"}, + {file = "uvloop-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b028776faf9b7a6d0a325664f899e4c670b2ae430265189eb8d76bd4a57d8a6e"}, + {file = "uvloop-0.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53aca21735eee3859e8c11265445925911ffe410974f13304edb0447f9f58420"}, + {file = "uvloop-0.18.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:847f2ed0887047c63da9ad788d54755579fa23f0784db7e752c7cf14cf2e7506"}, + {file = "uvloop-0.18.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6e20bb765fcac07879cd6767b6dca58127ba5a456149717e0e3b1f00d8eab51c"}, + {file = "uvloop-0.18.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e14de8800765b9916d051707f62e18a304cde661fa2b98a58816ca38d2b94029"}, + {file = "uvloop-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f3b18663efe0012bc4c315f1b64020e44596f5fabc281f5b0d9bc9465288559c"}, + {file = "uvloop-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6d341bc109fb8ea69025b3ec281fcb155d6824a8ebf5486c989ff7748351a37"}, + {file = "uvloop-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:895a1e3aca2504638a802d0bec2759acc2f43a0291a1dff886d69f8b7baff399"}, + {file = "uvloop-0.18.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d90858f32a852988d33987d608bcfba92a1874eb9f183995def59a34229f30d"}, + {file = "uvloop-0.18.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db1fcbad5deb9551e011ca589c5e7258b5afa78598174ac37a5f15ddcfb4ac7b"}, + {file = "uvloop-0.18.0.tar.gz", hash = "sha256:d5d1135beffe9cd95d0350f19e2716bc38be47d5df296d7cc46e3b7557c0d1ff"}, +] + +[package.extras] +docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] +test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] + +[[package]] +name = "vine" +version = "5.0.0" +description = "Promises, promises, promises." +optional = false +python-versions = ">=3.6" +files = [ + {file = "vine-5.0.0-py2.py3-none-any.whl", hash = "sha256:4c9dceab6f76ed92105027c49c823800dd33cacce13bdedc5b914e3514b7fb30"}, + {file = "vine-5.0.0.tar.gz", hash = "sha256:7d3b1624a953da82ef63462013bbd271d3eb75751489f9807598e8f340bd637e"}, +] + +[[package]] +name = "watchfiles" +version = "0.21.0" +description = "Simple, modern and high performance file watching and code reload in python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "watchfiles-0.21.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa"}, + {file = "watchfiles-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c107ea3cf2bd07199d66f156e3ea756d1b84dfd43b542b2d870b77868c98c03"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d9ac347653ebd95839a7c607608703b20bc07e577e870d824fa4801bc1cb124"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5eb86c6acb498208e7663ca22dbe68ca2cf42ab5bf1c776670a50919a56e64ab"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f564bf68404144ea6b87a78a3f910cc8de216c6b12a4cf0b27718bf4ec38d303"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d0f32ebfaa9c6011f8454994f86108c2eb9c79b8b7de00b36d558cadcedaa3d"}, + {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6d45d9b699ecbac6c7bd8e0a2609767491540403610962968d258fd6405c17c"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aff06b2cac3ef4616e26ba17a9c250c1fe9dd8a5d907d0193f84c499b1b6e6a9"}, + {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d9792dff410f266051025ecfaa927078b94cc7478954b06796a9756ccc7e14a9"}, + {file = "watchfiles-0.21.0-cp310-none-win32.whl", hash = "sha256:214cee7f9e09150d4fb42e24919a1e74d8c9b8a9306ed1474ecaddcd5479c293"}, + {file = "watchfiles-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:1ad7247d79f9f55bb25ab1778fd47f32d70cf36053941f07de0b7c4e96b5d235"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:668c265d90de8ae914f860d3eeb164534ba2e836811f91fecc7050416ee70aa7"}, + {file = "watchfiles-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a23092a992e61c3a6a70f350a56db7197242f3490da9c87b500f389b2d01eef"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e7941bbcfdded9c26b0bf720cb7e6fd803d95a55d2c14b4bd1f6a2772230c586"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11cd0c3100e2233e9c53106265da31d574355c288e15259c0d40a4405cbae317"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78f30cbe8b2ce770160d3c08cff01b2ae9306fe66ce899b73f0409dc1846c1b"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6674b00b9756b0af620aa2a3346b01f8e2a3dc729d25617e1b89cf6af4a54eb1"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd7ac678b92b29ba630d8c842d8ad6c555abda1b9ef044d6cc092dacbfc9719d"}, + {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c873345680c1b87f1e09e0eaf8cf6c891b9851d8b4d3645e7efe2ec20a20cc7"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49f56e6ecc2503e7dbe233fa328b2be1a7797d31548e7a193237dcdf1ad0eee0"}, + {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:02d91cbac553a3ad141db016e3350b03184deaafeba09b9d6439826ee594b365"}, + {file = "watchfiles-0.21.0-cp311-none-win32.whl", hash = "sha256:ebe684d7d26239e23d102a2bad2a358dedf18e462e8808778703427d1f584400"}, + {file = "watchfiles-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:4566006aa44cb0d21b8ab53baf4b9c667a0ed23efe4aaad8c227bfba0bf15cbe"}, + {file = "watchfiles-0.21.0-cp311-none-win_arm64.whl", hash = "sha256:c550a56bf209a3d987d5a975cdf2063b3389a5d16caf29db4bdddeae49f22078"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:51ddac60b96a42c15d24fbdc7a4bfcd02b5a29c047b7f8bf63d3f6f5a860949a"}, + {file = "watchfiles-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:511f0b034120cd1989932bf1e9081aa9fb00f1f949fbd2d9cab6264916ae89b1"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb92d49dbb95ec7a07511bc9efb0faff8fe24ef3805662b8d6808ba8409a71a"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f92944efc564867bbf841c823c8b71bb0be75e06b8ce45c084b46411475a915"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:642d66b75eda909fd1112d35c53816d59789a4b38c141a96d62f50a3ef9b3360"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d23bcd6c8eaa6324fe109d8cac01b41fe9a54b8c498af9ce464c1aeeb99903d6"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18d5b4da8cf3e41895b34e8c37d13c9ed294954907929aacd95153508d5d89d7"}, + {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b8d1eae0f65441963d805f766c7e9cd092f91e0c600c820c764a4ff71a0764c"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1fd9a5205139f3c6bb60d11f6072e0552f0a20b712c85f43d42342d162be1235"}, + {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a1e3014a625bcf107fbf38eece0e47fa0190e52e45dc6eee5a8265ddc6dc5ea7"}, + {file = "watchfiles-0.21.0-cp312-none-win32.whl", hash = "sha256:9d09869f2c5a6f2d9df50ce3064b3391d3ecb6dced708ad64467b9e4f2c9bef3"}, + {file = "watchfiles-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:18722b50783b5e30a18a8a5db3006bab146d2b705c92eb9a94f78c72beb94094"}, + {file = "watchfiles-0.21.0-cp312-none-win_arm64.whl", hash = "sha256:a3b9bec9579a15fb3ca2d9878deae789df72f2b0fdaf90ad49ee389cad5edab6"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:4ea10a29aa5de67de02256a28d1bf53d21322295cb00bd2d57fcd19b850ebd99"}, + {file = "watchfiles-0.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:40bca549fdc929b470dd1dbfcb47b3295cb46a6d2c90e50588b0a1b3bd98f429"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9b37a7ba223b2f26122c148bb8d09a9ff312afca998c48c725ff5a0a632145f7"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec8c8900dc5c83650a63dd48c4d1d245343f904c4b64b48798c67a3767d7e165"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ad3fe0a3567c2f0f629d800409cd528cb6251da12e81a1f765e5c5345fd0137"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d353c4cfda586db2a176ce42c88f2fc31ec25e50212650c89fdd0f560ee507b"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83a696da8922314ff2aec02987eefb03784f473281d740bf9170181829133765"}, + {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a03651352fc20975ee2a707cd2d74a386cd303cc688f407296064ad1e6d1562"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3ad692bc7792be8c32918c699638b660c0de078a6cbe464c46e1340dadb94c19"}, + {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06247538e8253975bdb328e7683f8515ff5ff041f43be6c40bff62d989b7d0b0"}, + {file = "watchfiles-0.21.0-cp38-none-win32.whl", hash = "sha256:9a0aa47f94ea9a0b39dd30850b0adf2e1cd32a8b4f9c7aa443d852aacf9ca214"}, + {file = "watchfiles-0.21.0-cp38-none-win_amd64.whl", hash = "sha256:8d5f400326840934e3507701f9f7269247f7c026d1b6cfd49477d2be0933cfca"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:7f762a1a85a12cc3484f77eee7be87b10f8c50b0b787bb02f4e357403cad0c0e"}, + {file = "watchfiles-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6e9be3ef84e2bb9710f3f777accce25556f4a71e15d2b73223788d528fcc2052"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c48a10d17571d1275701e14a601e36959ffada3add8cdbc9e5061a6e3579a5d"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c889025f59884423428c261f212e04d438de865beda0b1e1babab85ef4c0f01"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66fac0c238ab9a2e72d026b5fb91cb902c146202bbd29a9a1a44e8db7b710b6f"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a21f71885aa2744719459951819e7bf5a906a6448a6b2bbce8e9cc9f2c8128"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c9198c989f47898b2c22201756f73249de3748e0fc9de44adaf54a8b259cc0c"}, + {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f57c4461cd24fda22493109c45b3980863c58a25b8bec885ca8bea6b8d4b28"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:853853cbf7bf9408b404754b92512ebe3e3a83587503d766d23e6bf83d092ee6"}, + {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d5b1dc0e708fad9f92c296ab2f948af403bf201db8fb2eb4c8179db143732e49"}, + {file = "watchfiles-0.21.0-cp39-none-win32.whl", hash = "sha256:59137c0c6826bd56c710d1d2bda81553b5e6b7c84d5a676747d80caf0409ad94"}, + {file = "watchfiles-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:6cb8fdc044909e2078c248986f2fc76f911f72b51ea4a4fbbf472e01d14faa58"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab03a90b305d2588e8352168e8c5a1520b721d2d367f31e9332c4235b30b8994"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:927c589500f9f41e370b0125c12ac9e7d3a2fd166b89e9ee2828b3dda20bfe6f"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd467213195e76f838caf2c28cd65e58302d0254e636e7c0fca81efa4a2e62c"}, + {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02b73130687bc3f6bb79d8a170959042eb56eb3a42df3671c79b428cd73f17cc"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:08dca260e85ffae975448e344834d765983237ad6dc308231aa16e7933db763e"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:3ccceb50c611c433145502735e0370877cced72a6c70fd2410238bcbc7fe51d8"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57d430f5fb63fea141ab71ca9c064e80de3a20b427ca2febcbfcef70ff0ce895"}, + {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd5fad9b9c0dd89904bbdea978ce89a2b692a7ee8a0ce19b940e538c88a809c"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:be6dd5d52b73018b21adc1c5d28ac0c68184a64769052dfeb0c5d9998e7f56a2"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b3cab0e06143768499384a8a5efb9c4dc53e19382952859e4802f294214f36ec"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6ed10c2497e5fedadf61e465b3ca12a19f96004c15dcffe4bd442ebadc2d85"}, + {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43babacef21c519bc6631c5fce2a61eccdfc011b4bcb9047255e9620732c8097"}, + {file = "watchfiles-0.21.0.tar.gz", hash = "sha256:c76c635fabf542bb78524905718c39f736a98e5ab25b23ec6d4abede1a85a6a3"}, +] + +[package.dependencies] +anyio = ">=3.0.0" + +[[package]] +name = "wcwidth" +version = "0.2.8" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +files = [ + {file = "wcwidth-0.2.8-py2.py3-none-any.whl", hash = "sha256:77f719e01648ed600dfa5402c347481c0992263b81a027344f3e1ba25493a704"}, + {file = "wcwidth-0.2.8.tar.gz", hash = "sha256:8705c569999ffbb4f6a87c6d1b80f324bd6db952f5eb0b95bc07517f4c1813d4"}, +] + +[[package]] +name = "websocket-client" +version = "1.6.4" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websocket-client-1.6.4.tar.gz", hash = "sha256:b3324019b3c28572086c4a319f91d1dcd44e6e11cd340232978c684a7650d0df"}, + {file = "websocket_client-1.6.4-py3-none-any.whl", hash = "sha256:084072e0a7f5f347ef2ac3d8698a5e0b4ffbfcab607628cadabc650fc9a83a24"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + +[[package]] +name = "websockets" +version = "11.0.3" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac"}, + {file = "websockets-11.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d"}, + {file = "websockets-11.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f"}, + {file = "websockets-11.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564"}, + {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11"}, + {file = "websockets-11.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca"}, + {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54"}, + {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4"}, + {file = "websockets-11.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526"}, + {file = "websockets-11.0.3-cp310-cp310-win32.whl", hash = "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69"}, + {file = "websockets-11.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f"}, + {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb"}, + {file = "websockets-11.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288"}, + {file = "websockets-11.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d"}, + {file = "websockets-11.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3"}, + {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b"}, + {file = "websockets-11.0.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6"}, + {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97"}, + {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf"}, + {file = "websockets-11.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd"}, + {file = "websockets-11.0.3-cp311-cp311-win32.whl", hash = "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c"}, + {file = "websockets-11.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8"}, + {file = "websockets-11.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152"}, + {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f"}, + {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b"}, + {file = "websockets-11.0.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb"}, + {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007"}, + {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0"}, + {file = "websockets-11.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af"}, + {file = "websockets-11.0.3-cp37-cp37m-win32.whl", hash = "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f"}, + {file = "websockets-11.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de"}, + {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0"}, + {file = "websockets-11.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae"}, + {file = "websockets-11.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99"}, + {file = "websockets-11.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa"}, + {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86"}, + {file = "websockets-11.0.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c"}, + {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0"}, + {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e"}, + {file = "websockets-11.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788"}, + {file = "websockets-11.0.3-cp38-cp38-win32.whl", hash = "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74"}, + {file = "websockets-11.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f"}, + {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8"}, + {file = "websockets-11.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd"}, + {file = "websockets-11.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016"}, + {file = "websockets-11.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61"}, + {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b"}, + {file = "websockets-11.0.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd"}, + {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7"}, + {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1"}, + {file = "websockets-11.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311"}, + {file = "websockets-11.0.3-cp39-cp39-win32.whl", hash = "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128"}, + {file = "websockets-11.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b"}, + {file = "websockets-11.0.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280"}, + {file = "websockets-11.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4"}, + {file = "websockets-11.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602"}, + {file = "websockets-11.0.3-py3-none-any.whl", hash = "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6"}, + {file = "websockets-11.0.3.tar.gz", hash = "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"}, +] + +[[package]] +name = "werkzeug" +version = "0.16.1" +description = "The comprehensive WSGI web application library." +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "Werkzeug-0.16.1-py2.py3-none-any.whl", hash = "sha256:1e0dedc2acb1f46827daa2e399c1485c8fa17c0d8e70b6b875b4e7f54bf408d2"}, + {file = "Werkzeug-0.16.1.tar.gz", hash = "sha256:b353856d37dec59d6511359f97f6a4b2468442e454bd1c98298ddce53cac1f04"}, +] + +[package.extras] +dev = ["coverage", "pallets-sphinx-themes", "pytest", "sphinx", "sphinx-issues", "tox"] +termcolor = ["termcolor"] +watchdog = ["watchdog"] + +[[package]] +name = "xlsxwriter" +version = "3.1.8" +description = "A Python module for creating Excel XLSX files." +optional = true +python-versions = ">=3.6" +files = [ + {file = "XlsxWriter-3.1.8-py3-none-any.whl", hash = "sha256:2d8d1f392b3e041adf90042dd2f7b5f7468181a45e5e9a7d8376e64b374104f1"}, + {file = "XlsxWriter-3.1.8.tar.gz", hash = "sha256:059d0786fbfa3055588e81e9d5acf4ace28394bf09353a31ae2cae635740fc15"}, +] + +[[package]] +name = "yapf" +version = "0.40.2" +description = "A formatter for Python code" +optional = false +python-versions = ">=3.7" +files = [ + {file = "yapf-0.40.2-py3-none-any.whl", hash = "sha256:adc8b5dd02c0143108878c499284205adb258aad6db6634e5b869e7ee2bd548b"}, + {file = "yapf-0.40.2.tar.gz", hash = "sha256:4dab8a5ed7134e26d57c1647c7483afb3f136878b579062b786c9ba16b94637b"}, +] + +[package.dependencies] +importlib-metadata = ">=6.6.0" +platformdirs = ">=3.5.1" +tomli = ">=2.0.1" + +[[package]] +name = "yara-python" +version = "4.3.1" +description = "Python interface for YARA" +optional = true +python-versions = "*" +files = [ + {file = "yara-python-4.3.1.tar.gz", hash = "sha256:7af4354ee0f1561f51fd01771a121d8d385b93bbc6138a25a38ce68aa6801c2c"}, + {file = "yara_python-4.3.1-cp310-cp310-win32.whl", hash = "sha256:834d8fe2cdb5cf61d5e505d32c504b62891df5ce5af9f04dbd8c7575c1dbef30"}, + {file = "yara_python-4.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:ec05d0b7cc46728119d450875382d5386305510b8cfb14bad3627060c9e6f199"}, + {file = "yara_python-4.3.1-cp311-cp311-win32.whl", hash = "sha256:c8663f75f0c5f82e0f6053c9ddbddd97f956787bffb7f64cac1e40e0a21db89c"}, + {file = "yara_python-4.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:51f1bdbcdbcfa29a7a2cf7e7e5d6a7d8dbd00568e4ab6103adceda5a499895a6"}, + {file = "yara_python-4.3.1-cp37-cp37m-win32.whl", hash = "sha256:8847bb5e74d2b33cf48f372bed02805876ab2e414aa7fd50c16a7c6150316601"}, + {file = "yara_python-4.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:fbf8281a6eb538b5c219a9c54c65a910806e7adf28a7d878f2cff551cbbd43ea"}, + {file = "yara_python-4.3.1-cp38-cp38-win32.whl", hash = "sha256:fd70fe0ba522d4ecd73cbf45e528872844e61e2febe8f66e8a94c2674751b831"}, + {file = "yara_python-4.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:950377dd53d17870f66406f0db9ed9f6b04ac7e61c7f6fd5429459e2a00fd874"}, + {file = "yara_python-4.3.1-cp39-cp39-win32.whl", hash = "sha256:c032ad4ec6698a4f485b3d9721e6223028953bb61362482bdd7eabb147271e80"}, + {file = "yara_python-4.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:f0b7b2ea840638415a075a25860dbcb6466d83000a8367196188a6367b01af71"}, +] + +[[package]] +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[extras] +gcp = ["google-api-core", "google-api-python-client", "google-auth", "google-cloud-datastore", "google-cloud-error-reporting", "google-cloud-logging", "google-cloud-pubsub", "google-cloud-storage", "grpcio-status", "proto-plus", "protobuf", "psq"] +worker = ["dfDewey", "dfimagetools", "plaso", "pyhindsight"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.10" +content-hash = "38433f21a9b20f55bad6bf229dd09505ec7d18411db31a3e01912f0e76d4c091" diff --git a/poetry.toml b/poetry.toml new file mode 100644 index 000000000..53b35d370 --- /dev/null +++ b/poetry.toml @@ -0,0 +1,3 @@ +[virtualenvs] +create = true +in-project = true diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..f60ade3d9 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,83 @@ +[tool.poetry] +name = "turbinia" +version = "20231025" +description = "Automation and Scaling of Digital Forensics Tools" +authors = ["Turbinia Developers "] +maintainers = ["Turbinia Developers "] +license = "Apache-2.0" +readme = "README.md" +repository = "https://github.com/google/turbinia" +documentation = "https://turbinia.readthedocs.io/en/latest/" + +[tool.poetry.scripts] +turbiniactl = "turbinia.turbiniactl:main" + +[tool.poetry.dependencies] +python = "^3.10" +celery = { version = "^5.2.2" } +dfDewey = { version = "^20220603", optional = true } +dfimagetools = { version = "^20230806", optional = true } +docker = { version = "^6.1.3" } +fastapi = {extras = ["all"], version = ">=0.75.0,<0.99.0"} +filelock = { version = "*" } +# TODO: Cleanup GCP libs and their dependencies when psq/pubsub is deprecated +google-api-core = { version = "<2.0.0dev", optional = true } +google-api-python-client = { version = "*", optional = true } +google-auth = { version = ">=2.15.0", optional = true } +google-cloud-core = { version = "<2.0dev", optional = true } +google-cloud-datastore = { version = "<=2.0.0", optional = true } +google-cloud-error-reporting = { version = "*", optional = true } +google-cloud-logging = { version = ">=2.0.0,<3.0.0dev", optional = true } +google-cloud-pubsub = { version = "1.7.0", optional = true } +google-cloud-storage = { version = "<=2.2.1", optional = true } +grpcio-status = { version = "<1.49.0,>=1.33.2", optional = true } +libcloudforensics = { version = "20230601" } +pandas = { version = "^2.1.0" } +plaso = { version = "^20230717", optional = true } +prometheus_client = { version = "^0.17.1" } +protobuf = { version = ">=3.19.0,<4.0.0dev", optional = true } +proto-plus = { version = "<2.0.0dev,>=1.22.0", optional = true } +psq = { version = "*", optional = true } +pydantic = { version = "^1.10.5,<2"} +pyhindsight = { version = "^20230327.0", optional = true } +redis = { version = "^4.4.4" } +urllib3 = { version = ">=1.25.3,<2" } + +[tool.poetry.group.test] +optional = true + +[tool.poetry.group.test.dependencies] +coverage = "*" +fakeredis = "^1.8.1" +google-auth-oauthlib = "^1.1.0" +mock = "*" +pytest = "*" +yapf = "*" + +[tool.poetry.extras] +worker = [ + "dfimagetools", + "dfDewey", + "plaso", + "pyhindsight", +] + +gcp = [ + "google-api-core", + "google-api-python-client", + "google-auth", + "google-cloud-coverage", + "google-cloud-datastore", + "google-cloud-error-reporting", + "google-cloud-logging", + "google-cloud-pubsub", + "google-cloud-storage", + "grpcio-status", + "protobuf", + "proto-plus", + "psq", +] + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/requirements-test.txt b/requirements-test.txt new file mode 100644 index 000000000..8233bf392 --- /dev/null +++ b/requirements-test.txt @@ -0,0 +1,1875 @@ +acstore==20230519 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:b9f6d7b1609b9758fc0944ec25e443de0bd1acb6957388c2de5acc641e13d808 +adal==1.2.7 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2a7451ed7441ddbc57703042204a3e30ef747478eea022c70f789fc7f084bc3d \ + --hash=sha256:d74f45b81317454d96e982fd1c50e6fb5c99ac2223728aea8764433a39f566f1 +amqp==5.1.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2c1b13fecc0893e946c65cbd5f36427861cffa4ea2201d8f6fca22e2a373b5e2 \ + --hash=sha256:6f0956d2c23d8fa6e7691934d8c3930eadb44972cbbd1a7ae3a520f735d43359 +anyio==4.0.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f \ + --hash=sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a +artifacts==20230928 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:b918f2977e5797e06e4df111351ba6b26d8b7446a0eb64eec6b2f3fa7df1cb8f +async-timeout==4.0.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f \ + --hash=sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028 +azure-common==1.1.28 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4ac0cd3214e36b6a1b6a442686722a5d8cc449603aa833f3f0f40bda836704a3 \ + --hash=sha256:5c12d3dcf4ec20599ca6b0d3e09e86e146353d443e7fcc050c9a19c1f9df20ad +azure-core==1.29.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:500b3aa9bf2e90c5ccc88bb105d056114ca0ce7d0ce73afb8bc4d714b2fc7568 \ + --hash=sha256:b03261bcba22c0b9290faf9999cedd23e849ed2577feee90515694cea6bc74bf +azure-identity==1.14.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:72441799f8c5c89bfe21026965e266672a7c5d050c2c65119ef899dd5362e2b1 \ + --hash=sha256:edabf0e010eb85760e1dd19424d5e8f97ba2c9caff73a16e7b30ccbdbcce369b +azure-mgmt-compute==23.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:49dbb0f51006d557cbd0b22999cb9ecf3eabc2be46d96efcc6d651c6b33754b3 \ + --hash=sha256:d028afc4fbbd6796b2604195ffdb1021ef77b18cf01356f810820a52a7e2a12d +azure-mgmt-core==1.4.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:81071675f186a585555ef01816f2774d49c1c9024cb76e5720c3c0f6b337bb7d \ + --hash=sha256:d195208340094f98e5a6661b781cde6f6a051e79ce317caabd8ff97030a9b3ae +azure-mgmt-monitor==6.0.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:5ffbf500e499ab7912b1ba6d26cef26480d9ae411532019bb78d72562196e07b \ + --hash=sha256:fe4cf41e6680b74a228f81451dc5522656d599c6f343ecf702fc790fda9a357b +azure-mgmt-network==25.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:94191ce8ae243ab6e9c489f21330b3908937e296d443fea4e5100d57d52e14c8 \ + --hash=sha256:f939f75bf139e03d2c457a4f07a5ebadb5affdd70aa54be9a0af44b8e52132fc +azure-mgmt-resource==23.0.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:c2ba6cfd99df95f55f36eadc4245e3dc713257302a1fd0277756d94bd8cb28e0 \ + --hash=sha256:f185eec72bbc39f42bcb83ae6f1bad744f0e3f20a12d9b2b3e70d16c74ad9cc0 +azure-mgmt-storage==21.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:593f2544fc4f05750c4fe7ca4d83c32ea1e9d266e57899bbf79ce5940124e8cc \ + --hash=sha256:d6d3c0e917c988bc9ed0472477d3ef3f90886009eb1d97a711944f8375630162 +azure-storage-blob==12.18.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:e11935348981ffc005b848b55db25c04f2d1f90e1ee33000659906b763cf14c8 \ + --hash=sha256:ffd864bf9abf33dfc72c6ef37899a19bd9d585a946a2c61e288b4420c035df3a +bencode-py==4.0.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2a24ccda1725a51a650893d0b63260138359eaa299bb6e7a09961350a2a6e05c \ + --hash=sha256:99c06a55764e85ffe81622fdf9ee78bd737bad3ea61d119784a54bb28860d962 +billiard==4.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0f50d6be051c6b2b75bfbc8bfd85af195c5739c281d3f5b86a5640c65563614a \ + --hash=sha256:1ad2eeae8e28053d729ba3373d34d9d6e210f6e4d8bf0a9c64f92bd053f1edf5 +boto3==1.28.61 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:7a539aaf00eb45aea1ae857ef5d05e67def24fc07af4cb36c202fa45f8f30590 \ + --hash=sha256:ec49986e6c9549177e351494de64886c3f9daffd1a7af9e40302208aa1ffff1c +botocore==1.31.61 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:39b059603f0e92a26599eecc7fe9b141f13eb412c964786ca3a7df5375928c87 \ + --hash=sha256:433bf93af09ad205d6db4c2ffc1f0e3193ddad4e0aced0a68ad8b0fa9de903e2 +bottle==0.12.25 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:d6f15f9d422670b7c073d63bd8d287b135388da187a0f3e3c19293626ce034ea \ + --hash=sha256:e1a9c94970ae6d710b3fb4526294dfeb86f2cb4a81eff3a4b98dc40fb0e5e021 +cachetools==4.2.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:89ea6f1b638d5a73a4f9226be57ac5e4f399d22770b92355f92dcb0f7f001693 \ + --hash=sha256:92971d3cb7d2a97efff7c7bb1657f21a8f5fb309a37530537c71b1774189f2d1 +celery==5.3.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1e6ed40af72695464ce98ca2c201ad0ef8fd192246f6c9eac8bba343b980ad34 \ + --hash=sha256:9023df6a8962da79eb30c0c84d5f4863d9793a466354cc931d7f72423996de28 +certifi==2023.7.22 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ + --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 +cffi==1.16.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \ + --hash=sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a \ + --hash=sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417 \ + --hash=sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab \ + --hash=sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520 \ + --hash=sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36 \ + --hash=sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743 \ + --hash=sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8 \ + --hash=sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed \ + --hash=sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684 \ + --hash=sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56 \ + --hash=sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324 \ + --hash=sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d \ + --hash=sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235 \ + --hash=sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e \ + --hash=sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088 \ + --hash=sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000 \ + --hash=sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7 \ + --hash=sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e \ + --hash=sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673 \ + --hash=sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c \ + --hash=sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe \ + --hash=sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2 \ + --hash=sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098 \ + --hash=sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8 \ + --hash=sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a \ + --hash=sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0 \ + --hash=sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b \ + --hash=sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896 \ + --hash=sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e \ + --hash=sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9 \ + --hash=sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2 \ + --hash=sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b \ + --hash=sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6 \ + --hash=sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404 \ + --hash=sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f \ + --hash=sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0 \ + --hash=sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4 \ + --hash=sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc \ + --hash=sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936 \ + --hash=sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba \ + --hash=sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872 \ + --hash=sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb \ + --hash=sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614 \ + --hash=sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1 \ + --hash=sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d \ + --hash=sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969 \ + --hash=sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b \ + --hash=sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4 \ + --hash=sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627 \ + --hash=sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956 \ + --hash=sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357 +charset-normalizer==3.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843 \ + --hash=sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786 \ + --hash=sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e \ + --hash=sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8 \ + --hash=sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4 \ + --hash=sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa \ + --hash=sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d \ + --hash=sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82 \ + --hash=sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7 \ + --hash=sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895 \ + --hash=sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d \ + --hash=sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a \ + --hash=sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382 \ + --hash=sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678 \ + --hash=sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b \ + --hash=sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e \ + --hash=sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741 \ + --hash=sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4 \ + --hash=sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596 \ + --hash=sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9 \ + --hash=sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69 \ + --hash=sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c \ + --hash=sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77 \ + --hash=sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13 \ + --hash=sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459 \ + --hash=sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e \ + --hash=sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7 \ + --hash=sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908 \ + --hash=sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a \ + --hash=sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f \ + --hash=sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8 \ + --hash=sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482 \ + --hash=sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d \ + --hash=sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d \ + --hash=sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545 \ + --hash=sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34 \ + --hash=sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86 \ + --hash=sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6 \ + --hash=sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe \ + --hash=sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e \ + --hash=sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc \ + --hash=sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7 \ + --hash=sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd \ + --hash=sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c \ + --hash=sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557 \ + --hash=sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a \ + --hash=sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89 \ + --hash=sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078 \ + --hash=sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e \ + --hash=sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4 \ + --hash=sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403 \ + --hash=sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0 \ + --hash=sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89 \ + --hash=sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115 \ + --hash=sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9 \ + --hash=sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05 \ + --hash=sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a \ + --hash=sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec \ + --hash=sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56 \ + --hash=sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38 \ + --hash=sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479 \ + --hash=sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c \ + --hash=sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e \ + --hash=sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd \ + --hash=sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186 \ + --hash=sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455 \ + --hash=sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c \ + --hash=sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65 \ + --hash=sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78 \ + --hash=sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287 \ + --hash=sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df \ + --hash=sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43 \ + --hash=sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1 \ + --hash=sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7 \ + --hash=sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989 \ + --hash=sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a \ + --hash=sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63 \ + --hash=sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884 \ + --hash=sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649 \ + --hash=sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810 \ + --hash=sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828 \ + --hash=sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4 \ + --hash=sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2 \ + --hash=sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd \ + --hash=sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5 \ + --hash=sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe \ + --hash=sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293 \ + --hash=sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e \ + --hash=sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e \ + --hash=sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8 +click-didyoumean==0.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:a0713dc7a1de3f06bc0df5a9567ad19ead2d3d5689b434768a6145bff77c0667 \ + --hash=sha256:f184f0d851d96b6d29297354ed981b7dd71df7ff500d82fa6d11f0856bee8035 +click-plugins==1.1.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b \ + --hash=sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8 +click-repl==0.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:17849c23dba3d667247dc4defe1757fff98694e90fe37474f3feebb69ced26a9 \ + --hash=sha256:fb7e06deb8da8de86180a33a9da97ac316751c094c6899382da7feeeeb51b812 +click==8.1.7 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ + --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de +colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "win32" or platform_system == "Windows") \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 +colorlog==2.10.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:188a8f47b797fdf001891b5a55263789a2fda0ba7ba4c44f12741d0a8d5e9e03 \ + --hash=sha256:229cd0794a19d8f33b2b4a4b70e1225b6c010af96c2dc8615279abbc1bb3929a +coverage==7.3.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1 \ + --hash=sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63 \ + --hash=sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9 \ + --hash=sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312 \ + --hash=sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3 \ + --hash=sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb \ + --hash=sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25 \ + --hash=sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92 \ + --hash=sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda \ + --hash=sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148 \ + --hash=sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6 \ + --hash=sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216 \ + --hash=sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a \ + --hash=sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640 \ + --hash=sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836 \ + --hash=sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c \ + --hash=sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f \ + --hash=sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2 \ + --hash=sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901 \ + --hash=sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed \ + --hash=sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a \ + --hash=sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074 \ + --hash=sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc \ + --hash=sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84 \ + --hash=sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083 \ + --hash=sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f \ + --hash=sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c \ + --hash=sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c \ + --hash=sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637 \ + --hash=sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2 \ + --hash=sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82 \ + --hash=sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f \ + --hash=sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce \ + --hash=sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef \ + --hash=sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f \ + --hash=sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611 \ + --hash=sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c \ + --hash=sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76 \ + --hash=sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9 \ + --hash=sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce \ + --hash=sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9 \ + --hash=sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf \ + --hash=sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf \ + --hash=sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9 \ + --hash=sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6 \ + --hash=sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2 \ + --hash=sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a \ + --hash=sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a \ + --hash=sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf \ + --hash=sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738 \ + --hash=sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a \ + --hash=sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4 +cryptography==41.0.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67 \ + --hash=sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311 \ + --hash=sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8 \ + --hash=sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13 \ + --hash=sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143 \ + --hash=sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f \ + --hash=sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829 \ + --hash=sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd \ + --hash=sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397 \ + --hash=sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac \ + --hash=sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d \ + --hash=sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a \ + --hash=sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839 \ + --hash=sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e \ + --hash=sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6 \ + --hash=sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9 \ + --hash=sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860 \ + --hash=sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca \ + --hash=sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91 \ + --hash=sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d \ + --hash=sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714 \ + --hash=sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb \ + --hash=sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f +defusedxml==0.7.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ + --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 +dfdatetime==20230506 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:91441058c089de8822cf01d0a93acd5112a2d08ad7861ed3fe4cff1cd185ab79 \ + --hash=sha256:ed8209d9555e055403dc9f938bbe2dbc804f269e3261d9d36dc683c24aaba146 +dfdewey==20220603 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:f515275563ddb63a2d478736f1e82f0bc09d86efe267ee8ed0bb958643bd75fe \ + --hash=sha256:fd6036964c742f10c71617d9beb7545dd360c321ebc86e8d25aef14504bb194d +dfimagetools==20230806 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:d6cc0c8f4788f9a33ecde160b372161834ee20e73d3ef99ae382c8b608dc44e2 +dfvfs==20230531 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4d1c89321689e2848b2cf0166d3771daeb7d70fc0b177c9d452887562deaa88e \ + --hash=sha256:f2c71d781c0fe03b348ee93cc1f0c7da6c82e0038adb94b3c055b4ea647c428f +dfwinreg==20221218 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:a98e3dc115c6b8af3a944d76a49cf5ec0c5b2a0fa8003dac5d7cbc78b4b72d2d +dnspython==2.4.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8 \ + --hash=sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984 +docker==6.1.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20 \ + --hash=sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9 +dtfabric==20230520 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:ac93c111efde010ece3cf6477856e89a46fc71add64e178386cfe273a1a88553 +ecdsa==0.18.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49 \ + --hash=sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd +email-validator==2.0.0.post2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1ff6e86044200c56ae23595695c54e9614f4a9551e0e393614f764860b3d7900 \ + --hash=sha256:2466ba57cda361fb7309fd3d5a225723c788ca4bbad32a0ebd5373b99730285c +exceptiongroup==1.1.3 ; python_version >= "3.10" and python_version < "3.11" \ + --hash=sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9 \ + --hash=sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3 +fakeredis==1.10.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:001e36864eb9e19fce6414081245e7ae5c9a363a898fedc17911b1e680ba2d08 \ + --hash=sha256:99916a280d76dd452ed168538bdbe871adcb2140316b5174db5718cb2fd47ad1 +fastapi[all]==0.98.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0d3c18886f652038262b5898fec6b09f4ca92ee23e9d9b1d1d24e429f84bf27b \ + --hash=sha256:f4165fb1fe3610c52cb1b8282c1480de9c34bc270f56a965aa93a884c350d605 +filelock==3.12.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4 \ + --hash=sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd +flor==1.1.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1fac101e161446dbb2ee5379d5b950bb015fe6d90568385a549b538ca12fe942 \ + --hash=sha256:b332f6f78c9c99833c2d35012cee1cdb8ebb309fdc71d20fbc9f692479083f78 +future==0.18.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307 +google-api-core==1.34.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:6fb380f49d19ee1d09a9722d0379042b7edb06c0112e4796c7a395078a043e71 \ + --hash=sha256:7421474c39d396a74dfa317dddbc69188f2336835f526087c7648f91105e32ff +google-api-core[grpc]==1.34.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:6fb380f49d19ee1d09a9722d0379042b7edb06c0112e4796c7a395078a043e71 \ + --hash=sha256:7421474c39d396a74dfa317dddbc69188f2336835f526087c7648f91105e32ff +google-api-python-client==2.102.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:906ff9b672a4d5ddad8f4073a040e59f1fba6734909c14cd49938e37be53691d \ + --hash=sha256:ce2fb4d80eb24519ced44a1e79030866cc8a6379ed5ba6c76ba46e772cc68137 +google-auth-httplib2==0.1.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:42c50900b8e4dcdf8222364d1f0efe32b8421fb6ed72f2613f12f75cc933478c \ + --hash=sha256:c64bc555fdc6dd788ea62ecf7bccffcf497bf77244887a3f3d7a5a02f8e3fc29 +google-auth==1.35.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:997516b42ecb5b63e8d80f5632c1a61dddf41d2a4c2748057837e06e00014258 \ + --hash=sha256:b7033be9028c188ee30200b204ea00ed82ea1162e8ac1df4aa6ded19a191d88e +google-cloud-appengine-logging==1.3.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:6ac6261567b56611f6891fa650f76db8a48d528762e5c2a09230b41d82ee2be0 \ + --hash=sha256:a2989fca0e88463b56432aa821e64b81c3d171ee37b84771189b48e8b97cd496 +google-cloud-audit-log==0.2.5 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:18b94d4579002a450b7902cd2e8b8fdcb1ea2dd4df3b41f8f82be6d9f7fcd746 \ + --hash=sha256:86e2faba3383adc8fd04a5bd7fd4f960b3e4aedaa7ed950f2f891ce16902eb6b +google-cloud-core==1.7.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:d5af737c60a73b9588a0511332ac0cdc6294ad8e477c7b82be03a1afc7c3f7b6 \ + --hash=sha256:dfa40e9d75a825632103326cc52617e3652658c17c6f7360448388d6c9d009fe +google-cloud-datastore==2.0.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:6873ff457d565ee373b56dab0fa564b3d89f89f36d0acba54cec809d643605bb \ + --hash=sha256:dd83b82650b179cbbf010dd7bbb2fac871e1f5baea019f1bd080669b97c3bd8f +google-cloud-error-reporting==1.9.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4beef1ea02312437d5ed77ba0ce0556c934c4446254452f21a8f0112921d228c \ + --hash=sha256:efd7d9011c58113e68bb17da5ce532c309b444b30694caecd0f5be2420fe5c66 +google-cloud-logging==2.7.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1ecc36a5a232b5561ac067023ad27bdea83f40cada4190e141a8bb802644bd0a \ + --hash=sha256:a35707c44afb940fa6a1a07ba20014a0417257ff64a477e7d44abcb86b5b86a2 +google-cloud-pubsub==1.7.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:b7f577621f991b513034c50f3314ef66838701b3b0dd1fca0d5e9a0e82f9f801 \ + --hash=sha256:c8d098ebd208d00c8f3bb55eefecd8553e7391d59700426a97d35125f0dcb248 +google-cloud-storage==2.2.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0244f4612710cb5ec445fc6774387564e23f9823363fb408b28724e2102401b7 \ + --hash=sha256:abdf0fadf26516172e804e00b9c24819a3b3f7351cd32f35ca249bbfac965494 +google-crc32c==1.5.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a \ + --hash=sha256:02c65b9817512edc6a4ae7c7e987fea799d2e0ee40c53ec573a692bee24de876 \ + --hash=sha256:02ebb8bf46c13e36998aeaad1de9b48f4caf545e91d14041270d9dca767b780c \ + --hash=sha256:07eb3c611ce363c51a933bf6bd7f8e3878a51d124acfc89452a75120bc436289 \ + --hash=sha256:1034d91442ead5a95b5aaef90dbfaca8633b0247d1e41621d1e9f9db88c36298 \ + --hash=sha256:116a7c3c616dd14a3de8c64a965828b197e5f2d121fedd2f8c5585c547e87b02 \ + --hash=sha256:19e0a019d2c4dcc5e598cd4a4bc7b008546b0358bd322537c74ad47a5386884f \ + --hash=sha256:1c7abdac90433b09bad6c43a43af253e688c9cfc1c86d332aed13f9a7c7f65e2 \ + --hash=sha256:1e986b206dae4476f41bcec1faa057851f3889503a70e1bdb2378d406223994a \ + --hash=sha256:272d3892a1e1a2dbc39cc5cde96834c236d5327e2122d3aaa19f6614531bb6eb \ + --hash=sha256:278d2ed7c16cfc075c91378c4f47924c0625f5fc84b2d50d921b18b7975bd210 \ + --hash=sha256:2ad40e31093a4af319dadf503b2467ccdc8f67c72e4bcba97f8c10cb078207b5 \ + --hash=sha256:2e920d506ec85eb4ba50cd4228c2bec05642894d4c73c59b3a2fe20346bd00ee \ + --hash=sha256:3359fc442a743e870f4588fcf5dcbc1bf929df1fad8fb9905cd94e5edb02e84c \ + --hash=sha256:37933ec6e693e51a5b07505bd05de57eee12f3e8c32b07da7e73669398e6630a \ + --hash=sha256:398af5e3ba9cf768787eef45c803ff9614cc3e22a5b2f7d7ae116df8b11e3314 \ + --hash=sha256:3b747a674c20a67343cb61d43fdd9207ce5da6a99f629c6e2541aa0e89215bcd \ + --hash=sha256:461665ff58895f508e2866824a47bdee72497b091c730071f2b7575d5762ab65 \ + --hash=sha256:4c6fdd4fccbec90cc8a01fc00773fcd5fa28db683c116ee3cb35cd5da9ef6c37 \ + --hash=sha256:5829b792bf5822fd0a6f6eb34c5f81dd074f01d570ed7f36aa101d6fc7a0a6e4 \ + --hash=sha256:596d1f98fc70232fcb6590c439f43b350cb762fb5d61ce7b0e9db4539654cc13 \ + --hash=sha256:5ae44e10a8e3407dbe138984f21e536583f2bba1be9491239f942c2464ac0894 \ + --hash=sha256:635f5d4dd18758a1fbd1049a8e8d2fee4ffed124462d837d1a02a0e009c3ab31 \ + --hash=sha256:64e52e2b3970bd891309c113b54cf0e4384762c934d5ae56e283f9a0afcd953e \ + --hash=sha256:66741ef4ee08ea0b2cc3c86916ab66b6aef03768525627fd6a1b34968b4e3709 \ + --hash=sha256:67b741654b851abafb7bc625b6d1cdd520a379074e64b6a128e3b688c3c04740 \ + --hash=sha256:6ac08d24c1f16bd2bf5eca8eaf8304812f44af5cfe5062006ec676e7e1d50afc \ + --hash=sha256:6f998db4e71b645350b9ac28a2167e6632c239963ca9da411523bb439c5c514d \ + --hash=sha256:72218785ce41b9cfd2fc1d6a017dc1ff7acfc4c17d01053265c41a2c0cc39b8c \ + --hash=sha256:74dea7751d98034887dbd821b7aae3e1d36eda111d6ca36c206c44478035709c \ + --hash=sha256:759ce4851a4bb15ecabae28f4d2e18983c244eddd767f560165563bf9aefbc8d \ + --hash=sha256:77e2fd3057c9d78e225fa0a2160f96b64a824de17840351b26825b0848022906 \ + --hash=sha256:7c074fece789b5034b9b1404a1f8208fc2d4c6ce9decdd16e8220c5a793e6f61 \ + --hash=sha256:7c42c70cd1d362284289c6273adda4c6af8039a8ae12dc451dcd61cdabb8ab57 \ + --hash=sha256:7f57f14606cd1dd0f0de396e1e53824c371e9544a822648cd76c034d209b559c \ + --hash=sha256:83c681c526a3439b5cf94f7420471705bbf96262f49a6fe546a6db5f687a3d4a \ + --hash=sha256:8485b340a6a9e76c62a7dce3c98e5f102c9219f4cfbf896a00cf48caf078d438 \ + --hash=sha256:84e6e8cd997930fc66d5bb4fde61e2b62ba19d62b7abd7a69920406f9ecca946 \ + --hash=sha256:89284716bc6a5a415d4eaa11b1726d2d60a0cd12aadf5439828353662ede9dd7 \ + --hash=sha256:8b87e1a59c38f275c0e3676fc2ab6d59eccecfd460be267ac360cc31f7bcde96 \ + --hash=sha256:8f24ed114432de109aa9fd317278518a5af2d31ac2ea6b952b2f7782b43da091 \ + --hash=sha256:98cb4d057f285bd80d8778ebc4fde6b4d509ac3f331758fb1528b733215443ae \ + --hash=sha256:998679bf62b7fb599d2878aa3ed06b9ce688b8974893e7223c60db155f26bd8d \ + --hash=sha256:9ba053c5f50430a3fcfd36f75aff9caeba0440b2d076afdb79a318d6ca245f88 \ + --hash=sha256:9c99616c853bb585301df6de07ca2cadad344fd1ada6d62bb30aec05219c45d2 \ + --hash=sha256:a1fd716e7a01f8e717490fbe2e431d2905ab8aa598b9b12f8d10abebb36b04dd \ + --hash=sha256:a2355cba1f4ad8b6988a4ca3feed5bff33f6af2d7f134852cf279c2aebfde541 \ + --hash=sha256:b1f8133c9a275df5613a451e73f36c2aea4fe13c5c8997e22cf355ebd7bd0728 \ + --hash=sha256:b8667b48e7a7ef66afba2c81e1094ef526388d35b873966d8a9a447974ed9178 \ + --hash=sha256:ba1eb1843304b1e5537e1fca632fa894d6f6deca8d6389636ee5b4797affb968 \ + --hash=sha256:be82c3c8cfb15b30f36768797a640e800513793d6ae1724aaaafe5bf86f8f346 \ + --hash=sha256:c02ec1c5856179f171e032a31d6f8bf84e5a75c45c33b2e20a3de353b266ebd8 \ + --hash=sha256:c672d99a345849301784604bfeaeba4db0c7aae50b95be04dd651fd2a7310b93 \ + --hash=sha256:c6c777a480337ac14f38564ac88ae82d4cd238bf293f0a22295b66eb89ffced7 \ + --hash=sha256:cae0274952c079886567f3f4f685bcaf5708f0a23a5f5216fdab71f81a6c0273 \ + --hash=sha256:cd67cf24a553339d5062eff51013780a00d6f97a39ca062781d06b3a73b15462 \ + --hash=sha256:d3515f198eaa2f0ed49f8819d5732d70698c3fa37384146079b3799b97667a94 \ + --hash=sha256:d5280312b9af0976231f9e317c20e4a61cd2f9629b7bfea6a693d1878a264ebd \ + --hash=sha256:de06adc872bcd8c2a4e0dc51250e9e65ef2ca91be023b9d13ebd67c2ba552e1e \ + --hash=sha256:e1674e4307fa3024fc897ca774e9c7562c957af85df55efe2988ed9056dc4e57 \ + --hash=sha256:e2096eddb4e7c7bdae4bd69ad364e55e07b8316653234a56552d9c988bd2d61b \ + --hash=sha256:e560628513ed34759456a416bf86b54b2476c59144a9138165c9a1575801d0d9 \ + --hash=sha256:edfedb64740750e1a3b16152620220f51d58ff1b4abceb339ca92e934775c27a \ + --hash=sha256:f13cae8cc389a440def0c8c52057f37359014ccbc9dc1f0827936bcd367c6100 \ + --hash=sha256:f314013e7dcd5cf45ab1945d92e713eec788166262ae8deb2cfacd53def27325 \ + --hash=sha256:f583edb943cf2e09c60441b910d6a20b4d9d626c75a36c8fcac01a6c96c01183 \ + --hash=sha256:fd8536e902db7e365f49e7d9029283403974ccf29b13fc7028b97e2295b33556 \ + --hash=sha256:fe70e325aa68fa4b5edf7d1a4b6f691eb04bbccac0ace68e34820d283b5f80d4 +google-resumable-media==2.6.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:972852f6c65f933e15a4a210c2b96930763b47197cdf4aa5f5bea435efb626e7 \ + --hash=sha256:fc03d344381970f79eebb632a3c18bb1828593a2dc5572b5f90115ef7d11e81b +googleapis-common-protos==1.60.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:69f9bbcc6acde92cab2db95ce30a70bd2b81d20b12eff3f1aabaffcbe8a93918 \ + --hash=sha256:e73ebb404098db405ba95d1e1ae0aa91c3e15a71da031a2eeb6b2e23e7bc3708 +googleapis-common-protos[grpc]==1.60.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:69f9bbcc6acde92cab2db95ce30a70bd2b81d20b12eff3f1aabaffcbe8a93918 \ + --hash=sha256:e73ebb404098db405ba95d1e1ae0aa91c3e15a71da031a2eeb6b2e23e7bc3708 +grpc-google-iam-v1==0.12.6 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2bc4b8fdf22115a65d751c9317329322602c39b7c86a289c9b72d228d960ef5f \ + --hash=sha256:5c10f3d8dc2d88678ab1a9b0cb5482735c5efee71e6c0cd59f872eef22913f5c +grpcio-status==1.48.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2c33bbdbe20188b2953f46f31af669263b6ee2a9b2d38fa0d36ee091532e21bf \ + --hash=sha256:53695f45da07437b7c344ee4ef60d370fd2850179f5a28bb26d8e2aa1102ec11 +grpcio==1.59.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0ae444221b2c16d8211b55326f8ba173ba8f8c76349bfc1768198ba592b58f74 \ + --hash=sha256:0b84445fa94d59e6806c10266b977f92fa997db3585f125d6b751af02ff8b9fe \ + --hash=sha256:14890da86a0c0e9dc1ea8e90101d7a3e0e7b1e71f4487fab36e2bfd2ecadd13c \ + --hash=sha256:15f03bd714f987d48ae57fe092cf81960ae36da4e520e729392a59a75cda4f29 \ + --hash=sha256:1a839ba86764cc48226f50b924216000c79779c563a301586a107bda9cbe9dcf \ + --hash=sha256:225e5fa61c35eeaebb4e7491cd2d768cd8eb6ed00f2664fa83a58f29418b39fd \ + --hash=sha256:228b91ce454876d7eed74041aff24a8f04c0306b7250a2da99d35dd25e2a1211 \ + --hash=sha256:2ea95cd6abbe20138b8df965b4a8674ec312aaef3147c0f46a0bac661f09e8d0 \ + --hash=sha256:2f120d27051e4c59db2f267b71b833796770d3ea36ca712befa8c5fff5da6ebd \ + --hash=sha256:34341d9e81a4b669a5f5dca3b2a760b6798e95cdda2b173e65d29d0b16692857 \ + --hash=sha256:3859917de234a0a2a52132489c4425a73669de9c458b01c9a83687f1f31b5b10 \ + --hash=sha256:38823bd088c69f59966f594d087d3a929d1ef310506bee9e3648317660d65b81 \ + --hash=sha256:38da5310ef84e16d638ad89550b5b9424df508fd5c7b968b90eb9629ca9be4b9 \ + --hash=sha256:3b8ff795d35a93d1df6531f31c1502673d1cebeeba93d0f9bd74617381507e3f \ + --hash=sha256:50eff97397e29eeee5df106ea1afce3ee134d567aa2c8e04fabab05c79d791a7 \ + --hash=sha256:5711c51e204dc52065f4a3327dca46e69636a0b76d3e98c2c28c4ccef9b04c52 \ + --hash=sha256:598f3530231cf10ae03f4ab92d48c3be1fee0c52213a1d5958df1a90957e6a88 \ + --hash=sha256:611d9aa0017fa386809bddcb76653a5ab18c264faf4d9ff35cb904d44745f575 \ + --hash=sha256:61bc72a00ecc2b79d9695220b4d02e8ba53b702b42411397e831c9b0589f08a3 \ + --hash=sha256:63982150a7d598281fa1d7ffead6096e543ff8be189d3235dd2b5604f2c553e5 \ + --hash=sha256:6c4b1cc3a9dc1924d2eb26eec8792fedd4b3fcd10111e26c1d551f2e4eda79ce \ + --hash=sha256:81d86a096ccd24a57fa5772a544c9e566218bc4de49e8c909882dae9d73392df \ + --hash=sha256:849c47ef42424c86af069a9c5e691a765e304079755d5c29eff511263fad9c2a \ + --hash=sha256:871371ce0c0055d3db2a86fdebd1e1d647cf21a8912acc30052660297a5a6901 \ + --hash=sha256:8cd2d38c2d52f607d75a74143113174c36d8a416d9472415eab834f837580cf7 \ + --hash=sha256:936b2e04663660c600d5173bc2cc84e15adbad9c8f71946eb833b0afc205b996 \ + --hash=sha256:93e9cb546e610829e462147ce724a9cb108e61647a3454500438a6deef610be1 \ + --hash=sha256:956f0b7cb465a65de1bd90d5a7475b4dc55089b25042fe0f6c870707e9aabb1d \ + --hash=sha256:986de4aa75646e963466b386a8c5055c8b23a26a36a6c99052385d6fe8aaf180 \ + --hash=sha256:aca8a24fef80bef73f83eb8153f5f5a0134d9539b4c436a716256b311dda90a6 \ + --hash=sha256:acf70a63cf09dd494000007b798aff88a436e1c03b394995ce450be437b8e54f \ + --hash=sha256:b34c7a4c31841a2ea27246a05eed8a80c319bfc0d3e644412ec9ce437105ff6c \ + --hash=sha256:b95ec8ecc4f703f5caaa8d96e93e40c7f589bad299a2617bdb8becbcce525539 \ + --hash=sha256:ba0ca727a173ee093f49ead932c051af463258b4b493b956a2c099696f38aa66 \ + --hash=sha256:c041a91712bf23b2a910f61e16565a05869e505dc5a5c025d429ca6de5de842c \ + --hash=sha256:c0488c2b0528e6072010182075615620071371701733c63ab5be49140ed8f7f0 \ + --hash=sha256:c173a87d622ea074ce79be33b952f0b424fa92182063c3bda8625c11d3585d09 \ + --hash=sha256:c251d22de8f9f5cca9ee47e4bade7c5c853e6e40743f47f5cc02288ee7a87252 \ + --hash=sha256:c4dfdb49f4997dc664f30116af2d34751b91aa031f8c8ee251ce4dcfc11277b0 \ + --hash=sha256:ca87ee6183421b7cea3544190061f6c1c3dfc959e0b57a5286b108511fd34ff4 \ + --hash=sha256:ceb1e68135788c3fce2211de86a7597591f0b9a0d2bb80e8401fd1d915991bac \ + --hash=sha256:d09bd2a4e9f5a44d36bb8684f284835c14d30c22d8ec92ce796655af12163588 \ + --hash=sha256:d0fcf53df684fcc0154b1e61f6b4a8c4cf5f49d98a63511e3f30966feff39cd0 \ + --hash=sha256:d74f7d2d7c242a6af9d4d069552ec3669965b74fed6b92946e0e13b4168374f9 \ + --hash=sha256:de2599985b7c1b4ce7526e15c969d66b93687571aa008ca749d6235d056b7205 \ + --hash=sha256:e5378785dce2b91eb2e5b857ec7602305a3b5cf78311767146464bfa365fc897 \ + --hash=sha256:ec78aebb9b6771d6a1de7b6ca2f779a2f6113b9108d486e904bde323d51f5589 \ + --hash=sha256:f1feb034321ae2f718172d86b8276c03599846dc7bb1792ae370af02718f91c5 \ + --hash=sha256:f21917aa50b40842b51aff2de6ebf9e2f6af3fe0971c31960ad6a3a2b24988f4 \ + --hash=sha256:f367e4b524cb319e50acbdea57bb63c3b717c5d561974ace0b065a648bb3bad3 \ + --hash=sha256:f6cfe44a5d7c7d5f1017a7da1c8160304091ca5dc64a0f85bca0d63008c3137a \ + --hash=sha256:fa66cac32861500f280bb60fe7d5b3e22d68c51e18e65367e38f8669b78cea3b \ + --hash=sha256:fc8bf2e7bc725e76c0c11e474634a08c8f24bcf7426c0c6d60c8f9c6e70e4d4a \ + --hash=sha256:fe976910de34d21057bcb53b2c5e667843588b48bf11339da2a75f5c4c5b4055 +h11==0.14.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ + --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 +httpcore==0.18.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:13b5e5cd1dca1a6636a6aaea212b19f4f85cd88c366a2b82304181b769aab3c9 \ + --hash=sha256:adc5398ee0a476567bf87467063ee63584a8bce86078bf748e48754f60202ced +httplib2==0.22.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc \ + --hash=sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81 +httptools==0.6.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:03bfd2ae8a2d532952ac54445a2fb2504c804135ed28b53fefaf03d3a93eb1fd \ + --hash=sha256:0781fedc610293a2716bc7fa142d4c85e6776bc59d617a807ff91246a95dea35 \ + --hash=sha256:0d0b0571806a5168013b8c3d180d9f9d6997365a4212cb18ea20df18b938aa0b \ + --hash=sha256:0fb4a608c631f7dcbdf986f40af7a030521a10ba6bc3d36b28c1dc9e9035a3c0 \ + --hash=sha256:22c01fcd53648162730a71c42842f73b50f989daae36534c818b3f5050b54589 \ + --hash=sha256:23b09537086a5a611fad5696fc8963d67c7e7f98cb329d38ee114d588b0b74cd \ + --hash=sha256:259920bbae18740a40236807915def554132ad70af5067e562f4660b62c59b90 \ + --hash=sha256:26326e0a8fe56829f3af483200d914a7cd16d8d398d14e36888b56de30bec81a \ + --hash=sha256:274bf20eeb41b0956e34f6a81f84d26ed57c84dd9253f13dcb7174b27ccd8aaf \ + --hash=sha256:33eb1d4e609c835966e969a31b1dedf5ba16b38cab356c2ce4f3e33ffa94cad3 \ + --hash=sha256:35a541579bed0270d1ac10245a3e71e5beeb1903b5fbbc8d8b4d4e728d48ff1d \ + --hash=sha256:38f3cafedd6aa20ae05f81f2e616ea6f92116c8a0f8dcb79dc798df3356836e2 \ + --hash=sha256:3f96d2a351b5625a9fd9133c95744e8ca06f7a4f8f0b8231e4bbaae2c485046a \ + --hash=sha256:463c3bc5ef64b9cf091be9ac0e0556199503f6e80456b790a917774a616aff6e \ + --hash=sha256:47043a6e0ea753f006a9d0dd076a8f8c99bc0ecae86a0888448eb3076c43d717 \ + --hash=sha256:4e748fc0d5c4a629988ef50ac1aef99dfb5e8996583a73a717fc2cac4ab89932 \ + --hash=sha256:5dcc14c090ab57b35908d4a4585ec5c0715439df07be2913405991dbb37e049d \ + --hash=sha256:65d802e7b2538a9756df5acc062300c160907b02e15ed15ba035b02bce43e89c \ + --hash=sha256:6bdc6675ec6cb79d27e0575750ac6e2b47032742e24eed011b8db73f2da9ed40 \ + --hash=sha256:6e22896b42b95b3237eccc42278cd72c0df6f23247d886b7ded3163452481e38 \ + --hash=sha256:721e503245d591527cddd0f6fd771d156c509e831caa7a57929b55ac91ee2b51 \ + --hash=sha256:72205730bf1be875003692ca54a4a7c35fac77b4746008966061d9d41a61b0f5 \ + --hash=sha256:72ec7c70bd9f95ef1083d14a755f321d181f046ca685b6358676737a5fecd26a \ + --hash=sha256:73e9d66a5a28b2d5d9fbd9e197a31edd02be310186db423b28e6052472dc8201 \ + --hash=sha256:818325afee467d483bfab1647a72054246d29f9053fd17cc4b86cda09cc60339 \ + --hash=sha256:82c723ed5982f8ead00f8e7605c53e55ffe47c47465d878305ebe0082b6a1755 \ + --hash=sha256:82f228b88b0e8c6099a9c4757ce9fdbb8b45548074f8d0b1f0fc071e35655d1c \ + --hash=sha256:93f89975465133619aea8b1952bc6fa0e6bad22a447c6d982fc338fbb4c89649 \ + --hash=sha256:9fc6e409ad38cbd68b177cd5158fc4042c796b82ca88d99ec78f07bed6c6b796 \ + --hash=sha256:b0a816bb425c116a160fbc6f34cece097fd22ece15059d68932af686520966bd \ + --hash=sha256:b703d15dbe082cc23266bf5d9448e764c7cb3fcfe7cb358d79d3fd8248673ef9 \ + --hash=sha256:cf8169e839a0d740f3d3c9c4fa630ac1a5aaf81641a34575ca6773ed7ce041a1 \ + --hash=sha256:dea66d94e5a3f68c5e9d86e0894653b87d952e624845e0b0e3ad1c733c6cc75d \ + --hash=sha256:e41ccac9e77cd045f3e4ee0fc62cbf3d54d7d4b375431eb855561f26ee7a9ec4 \ + --hash=sha256:f959e4770b3fc8ee4dbc3578fd910fab9003e093f20ac8c621452c4d62e517cb +httpx==0.25.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:181ea7f8ba3a82578be86ef4171554dd45fec26a02556a744db029a0a27b7100 \ + --hash=sha256:47ecda285389cb32bb2691cc6e069e3ab0205956f681c5b2ad2325719751d875 +idna==3.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 +importlib-metadata==6.8.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb \ + --hash=sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743 +iniconfig==2.0.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \ + --hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 +isodate==0.6.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96 \ + --hash=sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9 +itsdangerous==2.1.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44 \ + --hash=sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a +jaraco-classes==3.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:10afa92b6743f25c0cf5f37c6bb6e18e2c5bb84a16527ccfc0040ea377e7aaeb \ + --hash=sha256:c063dd08e89217cee02c8d5e5ec560f2c8ce6cdc2fcdc2e68f7b2e5547ed3621 +jeepney==0.8.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "linux" \ + --hash=sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806 \ + --hash=sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755 +jinja2==3.1.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ + --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 +jmespath==1.0.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980 \ + --hash=sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe +keyring==24.2.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4901caaf597bfd3bbd78c9a0c7c4c29fcd8310dab2cffefe749e916b6527acd6 \ + --hash=sha256:ca0746a19ec421219f4d713f848fa297a661a8a8c1504867e55bfb5e09091509 +kombu==5.3.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0ba213f630a2cb2772728aef56ac6883dc3a2f13435e10048f6e97d48506dbbd \ + --hash=sha256:b753c9cfc9b1e976e637a7cbc1a65d446a22e45546cd996ea28f932082b7dc9e +kubernetes==28.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:10f56f8160dcb73647f15fafda268e7f60cf7dbc9f8e46d52fcd46d3beb0c18d \ + --hash=sha256:1468069a573430fb1cb5ad22876868f57977930f80a6749405da31cd6086a7e9 +libbde-python==20221031 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0497a6c77f18f8d14bbd1a54ebd051122599fdb56fad83586b4fbeb0af6f1ec0 \ + --hash=sha256:0aa359362986805998caa06b95bf9d8f5818734b2de3014a5eb49f1b5976ed88 \ + --hash=sha256:8ff19fd92258909a0ffe46680231c02f8fa57b5b0704d4a52482c606f136bc39 \ + --hash=sha256:aa422589bcc160816cdfa82d987385103f31eb029c40bff5cb43477334acdf19 \ + --hash=sha256:b86a5f2f1ac1d6985f9cd6f88b1ce98ee4e531ef045a604e4eb78540621eb846 \ + --hash=sha256:eb69fd1206dda243269a1dca42714975564b55a458736011c93c11275d233b30 +libcaes-python==20230406 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1aeded8ffc3920baf8e4f490c4ac8a3b2a09aafcc116e5b1baea32e45459d6e7 \ + --hash=sha256:4c7c7ef0e3370f60dfa28c4684c269752bce05b5afcb730c93de29b6b8bdeb2c \ + --hash=sha256:5b3f47ffca3682d2e078ad63be90555a653659da39232d2c914a2726135cbc21 \ + --hash=sha256:95da6adaef80aba6ac0ac8db5011f0ff1f86dc76d009dfe259a2dfed63811f4b \ + --hash=sha256:ae8563024aa89c3ac3c02f33a7bd8876b6504aa943fc31c8ff66fa291e028d88 \ + --hash=sha256:c7274a61beee066f079c7dbec9df92a3483ebeccd27e84cdb6f2cdb6928e00da \ + --hash=sha256:cfd75c493417df570f1cc6da1fc00fd4dc82bdc359b1c82abbb488d3bff8b3e6 \ + --hash=sha256:d16384b3e804fbfe50e8fab4e246480b8bc39857f244c8e908fe923df715f7c5 +libcloudforensics==20230601 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2a6dc01767ce52d341f41759b4d3455d8741bca5afa2535e7a10c561a167a23c \ + --hash=sha256:66bbac27fed58255f3b593695db2b140769c2e2845c359b1d7c02f8fd82be475 +libcreg-python==20230930 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:266a14777c99d7bc623ea501b00f84c132fde9641d054f4a51542b7446b62ea9 \ + --hash=sha256:2b78f1a5ad6529fef57391d0bc8a39aa57bfdcfb859d4fa0792b24038376a0bc \ + --hash=sha256:3d80b6f2e3463906f4f3ce01a154865efdd162719be8710ababb55eb743f0972 \ + --hash=sha256:467739605bac96bf42a14155d0686068aa5d9da81ad016c7a155e7d76374deff \ + --hash=sha256:aa04b1869c73a5038542f973c0b71d3ae0d75123005d354a775a539f4d4b0042 +libcst==1.0.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0138068baf09561268c7f079373bda45f0e2b606d2d19df1307ca8a5134fc465 \ + --hash=sha256:119ba709f1dcb785a4458cf36cedb51d6f9cb2eec0acd7bb171f730eac7cb6ce \ + --hash=sha256:1adcfa7cafb6a0d39a1a0bec541355608038b45815e0c5019c95f91921d42884 \ + --hash=sha256:37187337f979ba426d8bfefc08008c3c1b09b9e9f9387050804ed2da88107570 \ + --hash=sha256:414350df5e334ddf0db1732d63da44e81b734d45abe1c597b5e5c0dd46aa4156 \ + --hash=sha256:440887e5f82efb299f2e98d4bfa5663851a878cfc0efed652ab8c50205191436 \ + --hash=sha256:47dba43855e9c7b06d8b256ee81f0ebec6a4f43605456519577e09dfe4b4288c \ + --hash=sha256:4840a3de701778f0a19582bb3085c61591329153f801dc25da84689a3733960b \ + --hash=sha256:4b4e336f6d68456017671cdda8ddebf9caebce8052cc21a3f494b03d7bd28386 \ + --hash=sha256:5599166d5fec40e18601fb8868519dde99f77b6e4ad6074958018f9545da7abd \ + --hash=sha256:5e3293e77657ba62533553bb9f0c5fb173780e164c65db1ea2a3e0d03944a284 \ + --hash=sha256:600c4d3a9a2f75d5a055fed713a5a4d812709947909610aa6527abe08a31896f \ + --hash=sha256:6caa33430c0c7a0fcad921b0deeec61ddb96796b6f88dca94966f6db62065f4f \ + --hash=sha256:80423311f09fc5fc3270ede44d30d9d8d3c2d3dd50dbf703a581ca7346949fa6 \ + --hash=sha256:8420926791b0b6206cb831a7ec73d26ae820e65bdf07ce9813c7754c7722c07a \ + --hash=sha256:8c50541c3fd6b1d5a3765c4bb5ee8ecbba9d0e798e48f79fd5adf3b6752de4d0 \ + --hash=sha256:8d31ce2790eab59c1bd8e33fe72d09cfc78635c145bdc3f08296b360abb5f443 \ + --hash=sha256:967c66fabd52102954207bf1541312b467afc210fdf7033f32da992fb6c2372c \ + --hash=sha256:9a4931feceab171e6fce73de94e13880424367247dad6ff2b49cabfec733e144 \ + --hash=sha256:9d6dec2a3c443792e6af7c36fadc256e4ea586214c76b52f0d18118811dbe351 \ + --hash=sha256:a6b5aea04c35e13109edad3cf83bc6dcd74309b150a781d2189eecb288b73a87 \ + --hash=sha256:ae49dcbfadefb82e830d41d9f0a1db0af3b771224768f431f1b7b3a9803ed7e3 \ + --hash=sha256:ae7f4e71d714f256b5f2ff98b5a9effba0f9dff4d779d8f35d7eb157bef78f59 \ + --hash=sha256:b0533de4e35396c61aeb3a6266ac30369a855910c2385aaa902ff4aabd60d409 \ + --hash=sha256:b666a605f4205c8357696f3b6571a38f6a8537cdcbb8f357587d35168298af34 \ + --hash=sha256:b97f652b15c50e91df411a9c8d5e6f75882b30743a49b387dcedd3f68ed94d75 \ + --hash=sha256:c90c74a8a314f0774f045122323fb60bacba79cbf5f71883c0848ecd67179541 \ + --hash=sha256:d237e9164a43caa7d6765ee560412264484e7620c546a2ee10a8d01bd56884e0 \ + --hash=sha256:ddd4e0eeec499d1c824ab545e62e957dbbd69a16bc4273208817638eb7d6b3c6 \ + --hash=sha256:f2cb687e1514625e91024e50a5d2e485c0ad3be24f199874ebf32b5de0346150 +libesedb-python==20230318 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:263c1c3b7538d354bc1f9bb64f2c4f1b9c522144ad3d9f82eb18f0ea6dc86e84 \ + --hash=sha256:367f0db55651a9c795535a86eb1090932c47c93280a9253c73de75b29b0be57d \ + --hash=sha256:398f68b388e5d0c818f7891a37e2e2da0fc20e168f762246cbaaed6bb04d0763 \ + --hash=sha256:8627f679194e707bc14ffc1a86a6538cc1f42e69a2baeed2210533f11cba39dd \ + --hash=sha256:9b8579c16019100f5f138218725029ee04cc444bdc7bdfd1e73737f139a64798 \ + --hash=sha256:a37c3a2448381fd42798efe8052b93788e967a4157e7f22b1734f2cc2a2efae7 \ + --hash=sha256:b049803ba168310e8a9a532359436caf7178df47d6aa985d1ef27f0df4974c18 \ + --hash=sha256:db9a2f95a97ced0ca3790b7d626d009c4434ddb31f238d6c45755b7a0ea9e5e9 +libevt-python==20221022 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0bfc4f7ff1b7abd5d0239eff2464e5c1f6ef9ec782a5a609ee39852bcdf7c0da \ + --hash=sha256:14c321f9643377de1754814a96c191e00d7a91b8c017e81e516b81444a6e6ae9 \ + --hash=sha256:3baf1fe9340626b4d56f8a936f0ee1e5f66839caac17e5b5c6902069382b49ed \ + --hash=sha256:8de4ea472f826a301d2e9699b9f086814e8cc922c29abac3803fdcc7b4c247ce \ + --hash=sha256:9b33e9da215cf1eeb4578a0469c6a2f55d07ff19cdce8a8c8064ed03d464bf27 \ + --hash=sha256:b96b046671f2e2522bfddcab7d781786ecfa68e284a2ec834b238dd5d7537f48 +libevtx-python==20221101 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1f3ebebd677e800997007cb32d1cd26731ddd979f417d502d65e92a03b610171 \ + --hash=sha256:5d84f3fcff00ebab15c48e3cea0b6a2347ef8f583230d2f39c44ce5aa55fc7b3 \ + --hash=sha256:7552d3e5ce827b26e877c7591d2e4a6236b2e46a9ed65026e01ff16ced438743 \ + --hash=sha256:ad5dc573b61315c4592dcc588b0587955290c79f77a869529bb06110a41a7709 \ + --hash=sha256:cfcb380f5d4eca9aee33a7460977b18453376860274e0669809f78a4019cbecd \ + --hash=sha256:d8004ea30ec3abd5b6312e09db6d4e43a397d54a9067dadeb1e669bbbfea0d37 +libewf-python==20230212 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1248b1ddfb85c111d605de2eee8d69082bb6bbce579a0cdae9b3479e0315cdbc \ + --hash=sha256:6bb6cf255a2f3ee9065ab395d6978cdf5e30f5a941dca93e3b0d563250f9f8b0 \ + --hash=sha256:8dfb496bea6443bb9164b3ca2ade601b7e28a455cc7e3a7296d4bd3451c91313 \ + --hash=sha256:95fbf898efd292ee75df10360ba6c4d1cad174baab53130622d97d81ee01c3a6 \ + --hash=sha256:97b81cd93acc61fba2aab8f2e4027b201db23e1526f6b1130a74993c698741bf \ + --hash=sha256:9f54cd377073c647bbebaa456e92daa9a48a4bad9165b3b9838601265694836c \ + --hash=sha256:b66a61740efc1dd272dfb0c12f9afbd34ac095db616623c76c630783d945c3bc \ + --hash=sha256:d510e22cf9c6845358994f9a5d32e9f55badbed4e9aa232f0ad9ffab2237c463 +libfsapfs-python==20230617 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:20cf8a3f59ffe85c5ec54358be0a166c06b263b84ba31967f3dd0cdc01e9e3c1 \ + --hash=sha256:40f5d956c4855e0ce36735ddc76dc9f1448ae26b16d23322820a9fc3e99d3b57 \ + --hash=sha256:4983b339a1a09b4198b552cae8dfe83fee8467e6685bc46cbb7034008da7068e \ + --hash=sha256:66b935a389ce5e77a78731d167fd76e1bf75d229d9ac5e9f8dc86e65f88aa76e \ + --hash=sha256:bc3b3bec572011beb22489103942d194f6e02fd844b00044dfdd87437df8d4ff \ + --hash=sha256:cad586a28fce437f8eec3b7acceda7a71e06853e97b9c2c6126ce0e450b733ff \ + --hash=sha256:cc23857976ee45078e28b15fdfb057a5348e21787e5f209dba3c449f08b4882d \ + --hash=sha256:f228c193c00d2dadabf2143beea3fb8d67927d6ff371413926ce8f7bb4b1270a +libfsext-python==20230603 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:146f4a71a65c6b4c91b28a3c9edd7fdb70033698068b9566306d0ed1f7ed00a2 \ + --hash=sha256:3249808b150704798f46a4e7bf1f3f9ac248ab5237af421e6431af52b4e61188 \ + --hash=sha256:3c3dd65bcb3f45e7236d306be9170f25515c7cb9e5f0636337cad8c218e10fe9 \ + --hash=sha256:4ee99679eb480049aa26083ad58be9c604817f6afcff9a5a5cb1ca2a7b8968e7 \ + --hash=sha256:84b4a284fa72de522be87a7cbca584e1081b3a7268569b3723db427fb18b915a \ + --hash=sha256:a1d0ea6d37c80306a5020b414ff3e9d879335c32070d71a77b08e4271a48a2c4 \ + --hash=sha256:c61900f27020215101a38397ddc1c877c72f8f001bec5a140ef158ad787111ad \ + --hash=sha256:f941b976aabc901884a91f0451725231d123ae88e310059dda513c4a7470a7df +libfsfat-python==20220925 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:5c6c69cb43040f12e0ada700b318f276356a34903d475053b7d03ef91c09c6ef \ + --hash=sha256:625200cd5cc031653ccf5280d094a0fe003999a7af1df57db6e7a9efca51ed4f \ + --hash=sha256:76fd6919b34eef7c68817ae6a27d6cc268cdbb920210828ac7f0f7b9674d369e \ + --hash=sha256:85b856dac05271319378a01f0859913d74797e81425ec49792346696296078a0 \ + --hash=sha256:a314e907f19d4221db900270f4ee90b92fa994b47620610d2080eed1f79de741 \ + --hash=sha256:b8ae24636533dd3e82844e3f0a1aaf685be292b0299177338e1386125decee54 +libfshfs-python==20220831 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:17a27618677c190a5313ee0b14bd69dfe2581817babe1339f3f21fe01446f4f4 \ + --hash=sha256:67169fdee829bc52c31819ddbd49c653ec9bfa031a762a5ef67d7f237325a5a6 \ + --hash=sha256:67c6370a1611cf626221a0bd5b70735a6084ce1954b4708e759919879672dda7 \ + --hash=sha256:bca65aa50cffc4afd8aef678fab30274877c8ffe848e206733800cc03d44d74f \ + --hash=sha256:c3d55c20225afdc66b7c0c1a6432784bc3b366c94d8b55217cf7bc9fe595cd18 \ + --hash=sha256:d2649dde55a29164e8bd5ad97b2bd86f92f6429914b568473689b3f5bf06e95f +libfsntfs-python==20230606 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:373f0065888ef9db047d12ecc016b20bf077d0a0bfa9cd6306b564b5071ac370 \ + --hash=sha256:38dc1e5beb31146ca8fc70003bfc9cc15d98c5405a5d5339767bab8a18049e08 \ + --hash=sha256:5037a66e562ed03ff57b36dcd8666b555dda4dca1e2045d7f5654764182477a0 \ + --hash=sha256:6998aa3f09ebdfb6434c035987531edccfb9e3ca35c367b488ccd4e96331fd2e \ + --hash=sha256:c70df92a678553c52ad98c140fb3f6f6aa335a5103489fbc1dccef577475f7d7 \ + --hash=sha256:cc4a946073920e7d26d8f299d1b4a7b7ea0ab635bccad3ef5269f2976968c185 \ + --hash=sha256:d16fb849d3f92840b78b13328484096cccb6a587681353b81b1f2b1c79f452a3 \ + --hash=sha256:f0df820bd6d91103a36664f228fcc8564715bd9c4f446149d90a1e751bfabdff +libfsxfs-python==20220829 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:35bfe1f3e34816b045a892718fb0101fb9596ac9bb83cd3b1a1f4dbbfb76d234 \ + --hash=sha256:44f086b56fd2ced20894e25baccede09f4af7396d0628c5b470e19ce5c203b4e \ + --hash=sha256:46f8682ced362a73b6e190a834bbd82c834acd40210e307da352709773824b1e \ + --hash=sha256:47eb444e9fcc32b15160fba1597f50c8ffe420e34772f72f96305fd85ca568ac \ + --hash=sha256:98dbd22cefc1ebdcd020b11c5534db2f761724924e9b4a3be121b61d9d3e5343 \ + --hash=sha256:b060b5148a37b69adf8de0089435d09894192440d2524799d69206ee16b24b80 +libfvde-python==20220915 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:062778108dca75fb942ee46cc41770fbde757ebe72e57258d6d75e0e193f7ef8 \ + --hash=sha256:369c1b7299cc1adbdea53f6f522ab21e157b5fea5ffe0feedec21c7a5e0355b8 \ + --hash=sha256:57bb643f9d3222b5f77b1f807135ee331c36166029ebd844d84938966b7198ff \ + --hash=sha256:9fdf019ce73494aa14609f348f874faa9440f4c2ef8625cdc3835b795cbf5029 \ + --hash=sha256:b449a64af72c7bbfe8c4e6e28091dc4e5d345930e1e684235fda926e4a260333 \ + --hash=sha256:fbfa17477ff13c032e8c7e8dca960b182e2a8d4baad40a13c9a864745fd2fb1b +libfwnt-python==20220922 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:213620e071ed6fbb2555043be002b103b36b0cb28ca04956f09195451d8f76a3 \ + --hash=sha256:22772b4e5c59efb88801df35b7e69b85c73410a741449d5af252d497e22e1264 \ + --hash=sha256:48250ae5c36930d754023d4f49786a8609c057c5567c37f8bd81e26ac9a65da1 \ + --hash=sha256:631f0e347987ebf8cc280e2fb06793c9839dd38bad29eca637798d8873f4fbe4 \ + --hash=sha256:67929de58db49205018864417aa168616a2d20aa71fd20ad41cc92b6cf29899e \ + --hash=sha256:a236011bef5e2534d23da1312499467418bb6d74c9ad22a192453e22118950f0 +libfwsi-python==20230710 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:5f0bf8eb2ab8161cb8692c9db301728b8cdde19e7fea2e4037130272b5d74f04 \ + --hash=sha256:64ebb0138472cfa13be7b0239802d564862f6604e39202f97b84c1394d687cde \ + --hash=sha256:8adc58de91123833814d67bffcdf69d849d8cecc46358092d57619d152e41e46 \ + --hash=sha256:a1256a86adc7509e263490c8c64fc5be00eb89758e940b31b97e1b9faba9213e \ + --hash=sha256:b778c0c187cdc36dd1342b444f1f93545059bd060caa27f0e6a665fbccfc8081 \ + --hash=sha256:b837e15933a492d439e01f484341c1575e1ab03ae3487f4df514a969b4d65ff5 \ + --hash=sha256:f9fa55e9998356df61793259fdfdfaf55307fd2932c7c1d435576acb78eccc59 +liblnk-python==20230928 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:51dec5228e229c2405150373ce746056a77c718d2b86b0b1b4c2c163104e535e \ + --hash=sha256:6459c4da330d02d3ca29319836bf7a17fc43d293b79859e900023b6f65316b21 \ + --hash=sha256:a6412f6903701411f45253a4d70a9049d43952a75be8b4941eb54364e90661f3 \ + --hash=sha256:c454325f504a04f165bef698ca2db24f788857f581602f526a06dd9ff51732fc \ + --hash=sha256:dea452f539be422849f4882bf2340ef203e49afaeb7d1fe9773eb15324aaa90a +libluksde-python==20221103 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4555ff85de2b16220ed0d574882fd007f752829ee4b51071a71d5c884ef72724 \ + --hash=sha256:7634bd3695172db0282312b33fdd34470aed7056bc79ac21accad7e9b930c219 \ + --hash=sha256:80fa660a5ba7c8add013cf3d2b7d132bf817dae19b547437b23496abaec1e5f6 \ + --hash=sha256:8def6d57af58aea07e1059c47a4096f2d53d7e5619424f42f588e9668c5a573a \ + --hash=sha256:a7e6fccd02a44bc69d08491a7080219cc32b87ea4521d7432d085ff151500ced \ + --hash=sha256:e342cc7d4e77d408c36c0ef584d81a9467976d1762ecc9295d820acdef2ab2c3 +libmodi-python==20221023 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0a19ae7b66d752eaf577042640f690292498c87761b51e217ee40efc2a24ae29 \ + --hash=sha256:465aa3f9ff0d8a32a2df45ffaf7ffac1cc98977d35087f759e30bceaf17eddca \ + --hash=sha256:56ffaf9aaa43e2dd8342435d74849b68b8f676c06b069f5697fb3871b4f1c909 \ + --hash=sha256:5c9c0ec708e568aece905793a698b869eac71feed1d7b698b692d89670a0e3ec \ + --hash=sha256:98ee877eede96cc04afc063866715aa37989974a4156006b0dd02443cdf437ac \ + --hash=sha256:bef906efacdc95b6ec345c32b9cd17202ad451dafe0206ea523f669d1b42f1a0 +libmsiecf-python==20221024 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:46110afd8d275a93ff89a42610a5776e06d5dda7ae601444681542ea22eddd6d \ + --hash=sha256:93e8859dc3552744a32af09413d4d0231c77bb8cea982238347d45c655c970ad \ + --hash=sha256:b02355193d1851575d8d227e7e615a0138e5759f8ebb3c1ff12d5c105459c0b9 \ + --hash=sha256:c691b4480e6d145cb26eb62f4ec989bcb5210b4f75d78b4aa21ccdb7027157c4 \ + --hash=sha256:f0287b9959205051055aab8eabfa1a98e4c577adffbd0d503aec537554a888b8 \ + --hash=sha256:f717312a54574d73a8f14645c3382cd41ce6796586c10bcfe7dc84b43b5cbe4e +libolecf-python==20221024 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:17e6a4d20fd61d90255ea51f5656599762ae67317cf989a4bbe0262279170053 \ + --hash=sha256:475b2855236c3e8c104bd83971dc996b10f16ae3a9ff1148d0ba736fc53cffa4 \ + --hash=sha256:5ad8f97f9351c73738c78f4687a82a209e1466f7043ee1a9e8d880aabcb6dea4 \ + --hash=sha256:60fa735c8cb10d00c013a4bcbaa973b93f439aed62e1f5a058a934ec7114a894 \ + --hash=sha256:d18154fe71511fdf6ec92002fa246571b55ddbae2818ac2c4ab1a13c16fa3169 \ + --hash=sha256:ed7d88741cd7ed29044ee34eb8bed09897bbfaf46313c6bbf9e20925785c87f7 +libphdi-python==20221025 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:e4588b2ef1afe38ef40dd70a6d62c45a9c407e7dda1f006666e53df2602f886a \ + --hash=sha256:fe08e3b1737fa3170eda03e99da094ba68687490b5f87177e17d0521e8c21a28 +libqcow-python==20221124 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:38f4387f641a995ad80cda1f1c113d7cfabc7d965e0e7b052434c6684686de73 \ + --hash=sha256:61a6adbcb2d0aa2422e693621146beeec5068eb722e2d5d250136d4e304182e0 \ + --hash=sha256:819ecf7bc4f3ebe3ff99806f847dc213fb3ea2e00fbc4ad189e1acc536a9de6d \ + --hash=sha256:a7409d35c4f7b7629d893a75834d20c3db6cc66ba82972277f2401860fbae272 \ + --hash=sha256:de60bc7a9b3cdde61c7955137da3518680a00329772ffe5d49034b383dccc048 \ + --hash=sha256:ee4789a9e87a5477607ba040c052a0f35949a117a6c5b09ee73c0bedd60636b4 +libregf-python==20230319 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2a02a7c3609e2fb5b097ed9c3c4cefe4e1ad7c8ffcbd34bb9d9c649608f70598 \ + --hash=sha256:538594d8ed5e85b47e849b11b64c747d34fa4db16086e568ec87ece82fe10084 \ + --hash=sha256:82992eff98ade8f8bbb88e9c41f7b5d566cc5acce3381bf36bb62f82b787889b \ + --hash=sha256:83e18b9fe5cc111dc6fd2379c19c5cef5e10f871c9a8d100cb82391f934b6972 \ + --hash=sha256:9ed2c5e0c6947175c12af021b566fe8e6dfa35c1f4d197aee280c271d4ce8327 \ + --hash=sha256:a1ccab73bd3ef4dbad810ff00bd9fdac22cbce7eb64bd4b5a29f20605a816597 \ + --hash=sha256:c5890b91c0ace5fc945a8f6eec7eae3fcb35e8de4aae83f357e9b466e8117404 \ + --hash=sha256:e2e6744751e327e69a5004386eac658ccfc7ea29b35322155d921d359e5dad61 +libscca-python==20230716 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:3b2d3a212a24908284a7f1e0178b2ab9a500a5a8682bb76fa65633fd6d637ed2 \ + --hash=sha256:5a465dcc3ce0a763f3646ffdbe660e1f4c19a3bd43520f07f010f7bc250354b4 \ + --hash=sha256:5f34fa592d70be620935d7cd23df1d55d0787a5e567b7da3ba6ec4922aca906a \ + --hash=sha256:846b78ae5d8746e5314526d903430f56ce854efed94956f0e18f5ff7708f55a4 \ + --hash=sha256:98eaa4e69769ab00eef20e659e1b75faf5365fac88b2829e72ad50827c57a44a \ + --hash=sha256:aca8b0f56aa6256f57366bcab27b693257e15f74a14e97c07a44f94f255a12af \ + --hash=sha256:c16a9afbe73837c71ff8b9bba514b6e48b9e6127e187bc9ef1861dc2d7d6ec46 +libsigscan-python==20230109 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:184e1e706c0b1922626161479b013866d76eca003124ec39939f8302cb5c8e49 \ + --hash=sha256:36cc442630e58387162cdc26b1d4e64b72ea36856fac3fd3b0196f10b48c667e \ + --hash=sha256:4fa0dad6f1b9825f8b19099fb803fbc239cca4108da3986403c6f3986bf1ff63 \ + --hash=sha256:566466d07dc3652a9b0aec0a2c6015bd50d568b009e8c6b26f08c678e88c193c \ + --hash=sha256:5f18592f6d38103b953be8847ae1542f46442778d112d0b8b9311ffd9d782f53 \ + --hash=sha256:72a0d7de6eac130cfab558106741a1ee16047dc6f97244ba1994eda7589b46c9 \ + --hash=sha256:a3ecd8190c0ebb64256df9979240c68bdcd8e00ee5d03d300ed8abf3bb54548a \ + --hash=sha256:d47d758dded12959a533d689132cec7a1fd407ab5fce04023101c7ad8d0e4a4d +libsmdev-python==20221028 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:09989b6e977bf64ecc115a07cd44258de2879b0d5acc45328202b44b4d82047d \ + --hash=sha256:6694f1cf71736725ce4093742680883db76557e5470a5f0652e9a506e010acf8 \ + --hash=sha256:a325b61ca5184c71826c095f69ca374c7c4301acd0f626f83a67b056b90ad13b \ + --hash=sha256:ed4606b30fee75e5dd428cd84a2a8f50f1321908583e80b7c9096b9a660951bd \ + --hash=sha256:f6b901b3cfaa52de5fd3ee220c98e23b590546d732d3d78fee53a1f4906945d2 \ + --hash=sha256:fb789a7f5060dc7fe994502f954293393339273b80f11a7d83bb7037c0ea3a1d +libsmraw-python==20230320 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:3c0435fe287c72bd3470463838cc116dbb8bf859a12f089d32736728698ba59a \ + --hash=sha256:451bc590755044123b410ab243d0de070790615610e4039cae308c458fa2f85a \ + --hash=sha256:5f84bea1fdd19a4fa4de87f0556cb23b06fa80e1be2d5ed7ea71f5bdff051c68 \ + --hash=sha256:6fa01fa1f2fa72cdc53f4d69c3c1ec07c5ecd08cc8bfcfd90148108bc689b082 \ + --hash=sha256:83174b2979da123464feaab5b114178dafac08886e42782a5f8bab569e10c85b \ + --hash=sha256:c25b4e36e969793051456275c2dff527ee51e7d0fce8043cd176262a7a075681 \ + --hash=sha256:f2ed5a4c4a60e443b1590a119f6180daf319e1904f7c24faecf5389fb2c7be09 \ + --hash=sha256:ffcb80bc9fa282da489ec884260a5cecfa420a0fb1b947e64b192cdda4016a1c +libvhdi-python==20221124 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1874bbc6be1267b86d6511fa8fc98c4730e6dfbe8cfa7f321390c1b45a0c9e6b \ + --hash=sha256:2310de5cf043f1ac628bfd8d179ba01bcf066f313ae06e7a5b504b2a08dd5903 \ + --hash=sha256:28edcf26b5f21f5287ded3adb0664f2681060ab77921c076117a413081d7315f \ + --hash=sha256:383fa8a6340f5b9e34497a23158e7afa5a5ff5150084e1f6e17f017e2fd973db \ + --hash=sha256:47646c5bb69fb8ee3592912663c9f77c24d586b2032ab63d8db2301a0dc222d4 \ + --hash=sha256:bfdeeaea9bdc6d6d4b0d075722f8883140e87866ee307e57d95b175cab2590ef +libvmdk-python==20221124 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:207e43b331692bda8123611f6e8bfbc2cbd6e52b37103c83611d9b117086a61c \ + --hash=sha256:7dbc88527e7eab7b40d2377cbac933d0aaaed5a9bc94ae887530d6a9093efd0b \ + --hash=sha256:81482880ffdc70f7cee5ab912847794390741ab44895e2edf81cb72d788e617a \ + --hash=sha256:b2cba366b0723087626d1397ec933c00bd3845ce9be9427b873384452a0b1905 \ + --hash=sha256:c48b0d02cd5d864cd7f212b5f868ac8464ff13fd23205b69eb1d070f57f6fd1b \ + --hash=sha256:f1679488d0fa20a8b878b26fe606a9e2e7328d6449b1e471d27ac32b16818406 +libvsapm-python==20230506 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:22b789dc02e481e6f209b21f6f320d223c590badc97ff9793aafd30b63468271 \ + --hash=sha256:5f74c7c975eededec8566997be85f569bc94a4adc8a4c9bdd8dd733cad6b2f9d \ + --hash=sha256:6f25babe37ae8aee1482a4ff249555ace2a240d9a167aa60d4e7e70a99d43963 \ + --hash=sha256:8a7dded77f7bad1ab67e6247ba26a9da2374305098aa76cf295534bf1d2086c7 \ + --hash=sha256:ce6fa2b28212355d588110166ae6a29a537459497a56ac76739a3a026170ab3d \ + --hash=sha256:ddc660d2dbc847f8ab4ea063cc3cc301f3eba46f52e1ed9d7f4291d34d0eeca8 \ + --hash=sha256:e58ffe72c28145e6a59dc4872e0ec743093b49c565102d1292a0823823c02f90 \ + --hash=sha256:f27f5495a705db1c9e776fdc945ec9936951bdd9839b0e0b97e5c8c2493d6f66 +libvsgpt-python==20221029 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:130bf9f87703f0ffa80d871b48a3024c7b2f69d78e98d607e46aa697997dfac9 \ + --hash=sha256:400d3af8629d4d9ae076300a2e9d96b3d34627357f44ba970352d74b02135b4d \ + --hash=sha256:9d6b0cedd4bfe9582cfb7e7c44bc617afbd0ea6a1af8ccdb8d9da02c6f09e253 \ + --hash=sha256:a162562375613b11c3949d4783ea4acfb8c7312f976da5ac8adfeda0f4cc7e2c \ + --hash=sha256:d868a93ef44c034be25902880429e9f8f88b2e9a3817439eb8d9b4ccc43f4925 \ + --hash=sha256:f754ea1dff14aad29d7ab9ba285e831f78404132e8a680cddd54e9f303bcf2d2 +libvshadow-python==20221030 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:39ac1f710dac7d5b56cdfc9ae0cf055f828a911189f6f97a77b9adf7149eba84 \ + --hash=sha256:53d7309bc3727bd7836fbec5901dfd5377c132a9f58c212aa5b8b37176422d08 \ + --hash=sha256:726741b76428b6bd9b70396d0a48dcdc27bc2cf89a30faa811de839fb33cfcac \ + --hash=sha256:84ea267e53cba6558e1ceb6f60bff179b5854715aa8baa31d0da1960c2f9c26a \ + --hash=sha256:b25afe1bf77c44d0a7fe86c7ad998b7c8d487115d45f95f5f6cb5623a4cc512e \ + --hash=sha256:f54a8efa35a38ec85119988c55b1137e6f04f71634bc821070c47aa87fb910da +libvslvm-python==20221025 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:214a92ce5b13a9972a6010578d8e0cc919ce2fafcab381600553777e2ef4b80f \ + --hash=sha256:3da04f79142cc8361177fc55756f2792330d35315144e019926994bd9b30271a \ + --hash=sha256:4864113099ac917ee23bafd76d68a4b2ad11e83030337c527c3600ae6c0a2c20 \ + --hash=sha256:677859372ebf0d41bcafe0b7d5bd8ce10574404eb8523f40ad27875e21bd18a3 \ + --hash=sha256:c36d0dd0f578cb874998787f692f324542a35941f3822b28bc8a0064710bcc51 \ + --hash=sha256:d7b9367c134269293dff9366954cbf999367ad83fa3e3da3abacd664edc62bc5 +lz4==4.3.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0ca83a623c449295bafad745dcd399cea4c55b16b13ed8cfea30963b004016c9 \ + --hash=sha256:0f5614d8229b33d4a97cb527db2a1ac81308c6e796e7bdb5d1309127289f69d5 \ + --hash=sha256:1c4c100d99eed7c08d4e8852dd11e7d1ec47a3340f49e3a96f8dfbba17ffb300 \ + --hash=sha256:1f25eb322eeb24068bb7647cae2b0732b71e5c639e4e4026db57618dcd8279f0 \ + --hash=sha256:200d05777d61ba1ff8d29cb51c534a162ea0b4fe6d3c28be3571a0a48ff36080 \ + --hash=sha256:31d72731c4ac6ebdce57cd9a5cabe0aecba229c4f31ba3e2c64ae52eee3fdb1c \ + --hash=sha256:3a85b430138882f82f354135b98c320dafb96fc8fe4656573d95ab05de9eb092 \ + --hash=sha256:4931ab28a0d1c133104613e74eec1b8bb1f52403faabe4f47f93008785c0b929 \ + --hash=sha256:4caedeb19e3ede6c7a178968b800f910db6503cb4cb1e9cc9221157572139b49 \ + --hash=sha256:65d5c93f8badacfa0456b660285e394e65023ef8071142e0dcbd4762166e1be0 \ + --hash=sha256:6b50f096a6a25f3b2edca05aa626ce39979d63c3b160687c8c6d50ac3943d0ba \ + --hash=sha256:7211dc8f636ca625abc3d4fb9ab74e5444b92df4f8d58ec83c8868a2b0ff643d \ + --hash=sha256:7a9eec24ec7d8c99aab54de91b4a5a149559ed5b3097cf30249b665689b3d402 \ + --hash=sha256:7c2df117def1589fba1327dceee51c5c2176a2b5a7040b45e84185ce0c08b6a3 \ + --hash=sha256:7e2dc1bd88b60fa09b9b37f08553f45dc2b770c52a5996ea52b2b40f25445676 \ + --hash=sha256:83903fe6db92db0be101acedc677aa41a490b561567fe1b3fe68695b2110326c \ + --hash=sha256:83acfacab3a1a7ab9694333bcb7950fbeb0be21660d236fd09c8337a50817897 \ + --hash=sha256:86480f14a188c37cb1416cdabacfb4e42f7a5eab20a737dac9c4b1c227f3b822 \ + --hash=sha256:867664d9ca9bdfce840ac96d46cd8838c9ae891e859eb98ce82fcdf0e103a947 \ + --hash=sha256:8df16c9a2377bdc01e01e6de5a6e4bbc66ddf007a6b045688e285d7d9d61d1c9 \ + --hash=sha256:8f00a9ba98f6364cadda366ae6469b7b3568c0cced27e16a47ddf6b774169270 \ + --hash=sha256:926b26db87ec8822cf1870efc3d04d06062730ec3279bbbd33ba47a6c0a5c673 \ + --hash=sha256:a6a46889325fd60b8a6b62ffc61588ec500a1883db32cddee9903edfba0b7584 \ + --hash=sha256:a98b61e504fb69f99117b188e60b71e3c94469295571492a6468c1acd63c37ba \ + --hash=sha256:ad38dc6a7eea6f6b8b642aaa0683253288b0460b70cab3216838747163fb774d \ + --hash=sha256:b10b77dc2e6b1daa2f11e241141ab8285c42b4ed13a8642495620416279cc5b2 \ + --hash=sha256:d5ea0e788dc7e2311989b78cae7accf75a580827b4d96bbaf06c7e5a03989bd5 \ + --hash=sha256:e05afefc4529e97c08e65ef92432e5f5225c0bb21ad89dee1e06a882f91d7f5e \ + --hash=sha256:e1431d84a9cfb23e6773e72078ce8e65cad6745816d4cbf9ae67da5ea419acda \ + --hash=sha256:ec6755cacf83f0c5588d28abb40a1ac1643f2ff2115481089264c7630236618a \ + --hash=sha256:edc2fb3463d5d9338ccf13eb512aab61937be50aa70734bcf873f2f493801d3b \ + --hash=sha256:edd8987d8415b5dad25e797043936d91535017237f72fa456601be1479386c92 \ + --hash=sha256:edda4fb109439b7f3f58ed6bede59694bc631c4b69c041112b1b7dc727fffb23 \ + --hash=sha256:f571eab7fec554d3b1db0d666bdc2ad85c81f4b8cb08906c4c59a8cad75e6e22 \ + --hash=sha256:f7c50542b4ddceb74ab4f8b3435327a0861f06257ca501d59067a6a482535a77 +markupsafe==2.1.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ + --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ + --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ + --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ + --hash=sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c \ + --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ + --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ + --hash=sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb \ + --hash=sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939 \ + --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ + --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ + --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ + --hash=sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9 \ + --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ + --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ + --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ + --hash=sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd \ + --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ + --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ + --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ + --hash=sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac \ + --hash=sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52 \ + --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ + --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ + --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ + --hash=sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007 \ + --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ + --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ + --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ + --hash=sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0 \ + --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ + --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ + --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ + --hash=sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1 \ + --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ + --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ + --hash=sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c \ + --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ + --hash=sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823 \ + --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ + --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ + --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ + --hash=sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad \ + --hash=sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee \ + --hash=sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc \ + --hash=sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 \ + --hash=sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48 \ + --hash=sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7 \ + --hash=sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e \ + --hash=sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b \ + --hash=sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa \ + --hash=sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5 \ + --hash=sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e \ + --hash=sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb \ + --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ + --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ + --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ + --hash=sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc \ + --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \ + --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11 +mock==5.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:18c694e5ae8a208cdb3d2c20a993ca1a7b0efa258c247a1e565150f477f83744 \ + --hash=sha256:5e96aad5ccda4718e0a229ed94b2024df75cc2d55575ba5762d31f5767b8767d +more-itertools==10.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:626c369fa0eb37bac0291bce8259b332fd59ac792fa5497b59837309cd5b114a \ + --hash=sha256:64e0735fcfdc6f3464ea133afe8ea4483b1c5fe3a3d69852e6503b43a0b222e6 +msal-extensions==1.0.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:91e3db9620b822d0ed2b4d1850056a0f133cba04455e62f11612e40f5502f2ee \ + --hash=sha256:c676aba56b0cce3783de1b5c5ecfe828db998167875126ca4b47dc6436451354 +msal==1.24.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:aa0972884b3c6fdec53d9a0bd15c12e5bd7b71ac1b66d746f54d128709f3f8f8 \ + --hash=sha256:ce4320688f95c301ee74a4d0e9dbcfe029a63663a8cc61756f40d0d0d36574ad +msrest==0.7.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:21120a810e1233e5e6cc7fe40b474eeb4ec6f757a15d7cf86702c369f9567c32 \ + --hash=sha256:6e7661f46f3afd88b75667b7187a92829924446c7ea1d169be8c4bb7eeb788b9 +msrestazure==0.6.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:3de50f56147ef529b31e099a982496690468ecef33f0544cb0fa0cfe1e1de5b9 \ + --hash=sha256:a06f0dabc9a6f5efe3b6add4bd8fb623aeadacf816b7a35b0f89107e0544d189 +mypy-extensions==1.0.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ + --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 +netaddr==0.9.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:5148b1055679d2a1ec070c521b7db82137887fabd6d7e37f5199b44f775c3bb1 \ + --hash=sha256:7b46fa9b1a2d71fd5de9e4a3784ef339700a53a08c8040f08baf5f1194da0128 +numpy==1.26.0 ; python_version >= "3.10" and python_version <= "3.11" \ + --hash=sha256:020cdbee66ed46b671429c7265cf00d8ac91c046901c55684954c3958525dab2 \ + --hash=sha256:0621f7daf973d34d18b4e4bafb210bbaf1ef5e0100b5fa750bd9cde84c7ac292 \ + --hash=sha256:0792824ce2f7ea0c82ed2e4fecc29bb86bee0567a080dacaf2e0a01fe7654369 \ + --hash=sha256:09aaee96c2cbdea95de76ecb8a586cb687d281c881f5f17bfc0fb7f5890f6b91 \ + --hash=sha256:166b36197e9debc4e384e9c652ba60c0bacc216d0fc89e78f973a9760b503388 \ + --hash=sha256:186ba67fad3c60dbe8a3abff3b67a91351100f2661c8e2a80364ae6279720299 \ + --hash=sha256:306545e234503a24fe9ae95ebf84d25cba1fdc27db971aa2d9f1ab6bba19a9dd \ + --hash=sha256:436c8e9a4bdeeee84e3e59614d38c3dbd3235838a877af8c211cfcac8a80b8d3 \ + --hash=sha256:4a873a8180479bc829313e8d9798d5234dfacfc2e8a7ac188418189bb8eafbd2 \ + --hash=sha256:4acc65dd65da28060e206c8f27a573455ed724e6179941edb19f97e58161bb69 \ + --hash=sha256:51be5f8c349fdd1a5568e72713a21f518e7d6707bcf8503b528b88d33b57dc68 \ + --hash=sha256:546b7dd7e22f3c6861463bebb000646fa730e55df5ee4a0224408b5694cc6148 \ + --hash=sha256:5671338034b820c8d58c81ad1dafc0ed5a00771a82fccc71d6438df00302094b \ + --hash=sha256:637c58b468a69869258b8ae26f4a4c6ff8abffd4a8334c830ffb63e0feefe99a \ + --hash=sha256:767254ad364991ccfc4d81b8152912e53e103ec192d1bb4ea6b1f5a7117040be \ + --hash=sha256:7d484292eaeb3e84a51432a94f53578689ffdea3f90e10c8b203a99be5af57d8 \ + --hash=sha256:7f6bad22a791226d0a5c7c27a80a20e11cfe09ad5ef9084d4d3fc4a299cca505 \ + --hash=sha256:86f737708b366c36b76e953c46ba5827d8c27b7a8c9d0f471810728e5a2fe57c \ + --hash=sha256:8c6adc33561bd1d46f81131d5352348350fc23df4d742bb246cdfca606ea1208 \ + --hash=sha256:914b28d3215e0c721dc75db3ad6d62f51f630cb0c277e6b3bcb39519bed10bd8 \ + --hash=sha256:b44e6a09afc12952a7d2a58ca0a2429ee0d49a4f89d83a0a11052da696440e49 \ + --hash=sha256:bb0d9a1aaf5f1cb7967320e80690a1d7ff69f1d47ebc5a9bea013e3a21faec95 \ + --hash=sha256:c0b45c8b65b79337dee5134d038346d30e109e9e2e9d43464a2970e5c0e93229 \ + --hash=sha256:c2e698cb0c6dda9372ea98a0344245ee65bdc1c9dd939cceed6bb91256837896 \ + --hash=sha256:c78a22e95182fb2e7874712433eaa610478a3caf86f28c621708d35fa4fd6e7f \ + --hash=sha256:e062aa24638bb5018b7841977c360d2f5917268d125c833a686b7cbabbec496c \ + --hash=sha256:e5e18e5b14a7560d8acf1c596688f4dfd19b4f2945b245a71e5af4ddb7422feb \ + --hash=sha256:eae430ecf5794cb7ae7fa3808740b015aa80747e5266153128ef055975a72b99 \ + --hash=sha256:ee84ca3c58fe48b8ddafdeb1db87388dce2c3c3f701bf447b05e4cfcc3679112 \ + --hash=sha256:f042f66d0b4ae6d48e70e28d487376204d3cbf43b84c03bac57e28dac6151581 \ + --hash=sha256:f8db2f125746e44dce707dd44d4f4efeea8d7e2b43aace3f8d1f235cfa2733dd \ + --hash=sha256:f93fc78fe8bf15afe2b8d6b6499f1c73953169fad1e9a8dd086cdff3190e7fdf +oauthlib==3.2.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca \ + --hash=sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918 +opensearch-py==2.3.1 ; python_version >= "3.10" and python_version < "4" \ + --hash=sha256:eafbc5d56a7ca696afba7d77bcda1bbb849050cbf9265d57d8476576cb576395 \ + --hash=sha256:f82a2e914835f7d645a632777de9a62d0c0de60ffd2f8cdae2ccfa4cfc40a185 +orjson==3.9.7 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:01d647b2a9c45a23a84c3e70e19d120011cba5f56131d185c1b78685457320bb \ + --hash=sha256:0eb850a87e900a9c484150c414e21af53a6125a13f6e378cf4cc11ae86c8f9c5 \ + --hash=sha256:11c10f31f2c2056585f89d8229a56013bc2fe5de51e095ebc71868d070a8dd81 \ + --hash=sha256:14d3fb6cd1040a4a4a530b28e8085131ed94ebc90d72793c59a713de34b60838 \ + --hash=sha256:154fd67216c2ca38a2edb4089584504fbb6c0694b518b9020ad35ecc97252bb9 \ + --hash=sha256:1c3cee5c23979deb8d1b82dc4cc49be59cccc0547999dbe9adb434bb7af11cf7 \ + --hash=sha256:1eb0b0b2476f357eb2975ff040ef23978137aa674cd86204cfd15d2d17318588 \ + --hash=sha256:1f8b47650f90e298b78ecf4df003f66f54acdba6a0f763cc4df1eab048fe3738 \ + --hash=sha256:21a3344163be3b2c7e22cef14fa5abe957a892b2ea0525ee86ad8186921b6cf0 \ + --hash=sha256:23be6b22aab83f440b62a6f5975bcabeecb672bc627face6a83bc7aeb495dc7e \ + --hash=sha256:26ffb398de58247ff7bde895fe30817a036f967b0ad0e1cf2b54bda5f8dcfdd9 \ + --hash=sha256:2f8fcf696bbbc584c0c7ed4adb92fd2ad7d153a50258842787bc1524e50d7081 \ + --hash=sha256:355efdbbf0cecc3bd9b12589b8f8e9f03c813a115efa53f8dc2a523bfdb01334 \ + --hash=sha256:36b1df2e4095368ee388190687cb1b8557c67bc38400a942a1a77713580b50ae \ + --hash=sha256:38e34c3a21ed41a7dbd5349e24c3725be5416641fdeedf8f56fcbab6d981c900 \ + --hash=sha256:3aab72d2cef7f1dd6104c89b0b4d6b416b0db5ca87cc2fac5f79c5601f549cc2 \ + --hash=sha256:410aa9d34ad1089898f3db461b7b744d0efcf9252a9415bbdf23540d4f67589f \ + --hash=sha256:45a47f41b6c3beeb31ac5cf0ff7524987cfcce0a10c43156eb3ee8d92d92bf22 \ + --hash=sha256:4891d4c934f88b6c29b56395dfc7014ebf7e10b9e22ffd9877784e16c6b2064f \ + --hash=sha256:4c616b796358a70b1f675a24628e4823b67d9e376df2703e893da58247458956 \ + --hash=sha256:5198633137780d78b86bb54dafaaa9baea698b4f059456cd4554ab7009619221 \ + --hash=sha256:5a2937f528c84e64be20cb80e70cea76a6dfb74b628a04dab130679d4454395c \ + --hash=sha256:5da9032dac184b2ae2da4bce423edff7db34bfd936ebd7d4207ea45840f03905 \ + --hash=sha256:5e736815b30f7e3c9044ec06a98ee59e217a833227e10eb157f44071faddd7c5 \ + --hash=sha256:63ef3d371ea0b7239ace284cab9cd00d9c92b73119a7c274b437adb09bda35e6 \ + --hash=sha256:70b9a20a03576c6b7022926f614ac5a6b0914486825eac89196adf3267c6489d \ + --hash=sha256:76a0fc023910d8a8ab64daed8d31d608446d2d77c6474b616b34537aa7b79c7f \ + --hash=sha256:7951af8f2998045c656ba8062e8edf5e83fd82b912534ab1de1345de08a41d2b \ + --hash=sha256:7a34a199d89d82d1897fd4a47820eb50947eec9cda5fd73f4578ff692a912f89 \ + --hash=sha256:7bab596678d29ad969a524823c4e828929a90c09e91cc438e0ad79b37ce41166 \ + --hash=sha256:7ea3e63e61b4b0beeb08508458bdff2daca7a321468d3c4b320a758a2f554d31 \ + --hash=sha256:80acafe396ab689a326ab0d80f8cc61dec0dd2c5dca5b4b3825e7b1e0132c101 \ + --hash=sha256:82720ab0cf5bb436bbd97a319ac529aee06077ff7e61cab57cee04a596c4f9b4 \ + --hash=sha256:83cc275cf6dcb1a248e1876cdefd3f9b5f01063854acdfd687ec360cd3c9712a \ + --hash=sha256:85e39198f78e2f7e054d296395f6c96f5e02892337746ef5b6a1bf3ed5910142 \ + --hash=sha256:8769806ea0b45d7bf75cad253fba9ac6700b7050ebb19337ff6b4e9060f963fa \ + --hash=sha256:8bdb6c911dae5fbf110fe4f5cba578437526334df381b3554b6ab7f626e5eeca \ + --hash=sha256:8f4b0042d8388ac85b8330b65406c84c3229420a05068445c13ca28cc222f1f7 \ + --hash=sha256:90fe73a1f0321265126cbba13677dcceb367d926c7a65807bd80916af4c17047 \ + --hash=sha256:915e22c93e7b7b636240c5a79da5f6e4e84988d699656c8e27f2ac4c95b8dcc0 \ + --hash=sha256:9274ba499e7dfb8a651ee876d80386b481336d3868cba29af839370514e4dce0 \ + --hash=sha256:9d62c583b5110e6a5cf5169ab616aa4ec71f2c0c30f833306f9e378cf51b6c86 \ + --hash=sha256:9ef82157bbcecd75d6296d5d8b2d792242afcd064eb1ac573f8847b52e58f677 \ + --hash=sha256:a19e4074bc98793458b4b3ba35a9a1d132179345e60e152a1bb48c538ab863c4 \ + --hash=sha256:a347d7b43cb609e780ff8d7b3107d4bcb5b6fd09c2702aa7bdf52f15ed09fa09 \ + --hash=sha256:b4fb306c96e04c5863d52ba8d65137917a3d999059c11e659eba7b75a69167bd \ + --hash=sha256:b6df858e37c321cefbf27fe7ece30a950bcc3a75618a804a0dcef7ed9dd9c92d \ + --hash=sha256:b8e59650292aa3a8ea78073fc84184538783966528e442a1b9ed653aa282edcf \ + --hash=sha256:bcb9a60ed2101af2af450318cd89c6b8313e9f8df4e8fb12b657b2e97227cf08 \ + --hash=sha256:c3ba725cf5cf87d2d2d988d39c6a2a8b6fc983d78ff71bc728b0be54c869c884 \ + --hash=sha256:ca1706e8b8b565e934c142db6a9592e6401dc430e4b067a97781a997070c5378 \ + --hash=sha256:cd3e7aae977c723cc1dbb82f97babdb5e5fbce109630fbabb2ea5053523c89d3 \ + --hash=sha256:cf334ce1d2fadd1bf3e5e9bf15e58e0c42b26eb6590875ce65bd877d917a58aa \ + --hash=sha256:d8692948cada6ee21f33db5e23460f71c8010d6dfcfe293c9b96737600a7df78 \ + --hash=sha256:e5205ec0dfab1887dd383597012199f5175035e782cdb013c542187d280ca443 \ + --hash=sha256:e7e7f44e091b93eb39db88bb0cb765db09b7a7f64aea2f35e7d86cbf47046c65 \ + --hash=sha256:e94b7b31aa0d65f5b7c72dd8f8227dbd3e30354b99e7a9af096d967a77f2a580 \ + --hash=sha256:f26fb3e8e3e2ee405c947ff44a3e384e8fa1843bc35830fe6f3d9a95a1147b6e \ + --hash=sha256:f738fee63eb263530efd4d2e9c76316c1f47b3bbf38c1bf45ae9625feed0395e \ + --hash=sha256:f9e01239abea2f52a429fe9d95c96df95f078f0172489d691b4a848ace54a476 +packaging==23.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ + --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 +pandas==2.1.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:02304e11582c5d090e5a52aec726f31fe3f42895d6bfc1f28738f9b64b6f0614 \ + --hash=sha256:0489b0e6aa3d907e909aef92975edae89b1ee1654db5eafb9be633b0124abe97 \ + --hash=sha256:05674536bd477af36aa2effd4ec8f71b92234ce0cc174de34fd21e2ee99adbc2 \ + --hash=sha256:25e8474a8eb258e391e30c288eecec565bfed3e026f312b0cbd709a63906b6f8 \ + --hash=sha256:29deb61de5a8a93bdd033df328441a79fcf8dd3c12d5ed0b41a395eef9cd76f0 \ + --hash=sha256:366da7b0e540d1b908886d4feb3d951f2f1e572e655c1160f5fde28ad4abb750 \ + --hash=sha256:3bcad1e6fb34b727b016775bea407311f7721db87e5b409e6542f4546a4951ea \ + --hash=sha256:4c3f32fd7c4dccd035f71734df39231ac1a6ff95e8bdab8d891167197b7018d2 \ + --hash=sha256:4cdb0fab0400c2cb46dafcf1a0fe084c8bb2480a1fa8d81e19d15e12e6d4ded2 \ + --hash=sha256:4f99bebf19b7e03cf80a4e770a3e65eee9dd4e2679039f542d7c1ace7b7b1daa \ + --hash=sha256:58d997dbee0d4b64f3cb881a24f918b5f25dd64ddf31f467bb9b67ae4c63a1e4 \ + --hash=sha256:75ce97667d06d69396d72be074f0556698c7f662029322027c226fd7a26965cb \ + --hash=sha256:84e7e910096416adec68075dc87b986ff202920fb8704e6d9c8c9897fe7332d6 \ + --hash=sha256:9e2959720b70e106bb1d8b6eadd8ecd7c8e99ccdbe03ee03260877184bb2877d \ + --hash=sha256:9e50e72b667415a816ac27dfcfe686dc5a0b02202e06196b943d54c4f9c7693e \ + --hash=sha256:a0dbfea0dd3901ad4ce2306575c54348d98499c95be01b8d885a2737fe4d7a98 \ + --hash=sha256:b407381258a667df49d58a1b637be33e514b07f9285feb27769cedb3ab3d0b3a \ + --hash=sha256:b8bd1685556f3374520466998929bade3076aeae77c3e67ada5ed2b90b4de7f0 \ + --hash=sha256:c1f84c144dee086fe4f04a472b5cd51e680f061adf75c1ae4fc3a9275560f8f4 \ + --hash=sha256:c747793c4e9dcece7bb20156179529898abf505fe32cb40c4052107a3c620b49 \ + --hash=sha256:cc1ab6a25da197f03ebe6d8fa17273126120874386b4ac11c1d687df288542dd \ + --hash=sha256:dc3657869c7902810f32bd072f0740487f9e030c1a3ab03e0af093db35a9d14e \ + --hash=sha256:f5ec7740f9ccb90aec64edd71434711f58ee0ea7f5ed4ac48be11cfa9abf7317 \ + --hash=sha256:fecb198dc389429be557cde50a2d46da8434a17fe37d7d41ff102e3987fd947b \ + --hash=sha256:ffa8f0966de2c22de408d0e322db2faed6f6e74265aa0856f3824813cf124363 +pefile==2023.2.7 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc \ + --hash=sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6 +pip==23.2.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be \ + --hash=sha256:fb0bd5435b3200c602b5bf61d2d43c2f13c02e29c1707567ae7fbc514eb9faf2 +plaso==20230717 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:028f00eabd4e7824bab3fe592518a8a095cdca5b204c28792aacfdf1e3489a64 +platformdirs==3.11.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3 \ + --hash=sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e +pluggy==1.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12 \ + --hash=sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7 +portalocker==2.8.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2b035aa7828e46c58e9b31390ee1f169b98e1066ab10b9a6a861fe7e25ee4f33 \ + --hash=sha256:cfb86acc09b9aa7c3b43594e19be1345b9d16af3feb08bf92f23d4dce513a28e +prometheus-client==0.17.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091 \ + --hash=sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101 +prompt-toolkit==3.0.39 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac \ + --hash=sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88 +proto-plus==1.22.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:a49cd903bc0b6ab41f76bf65510439d56ca76f868adf0274e738bfdd096894df \ + --hash=sha256:fdcd09713cbd42480740d2fe29c990f7fbd885a67efc328aa8be6ee3e9f76a6b +protobuf==3.20.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7 \ + --hash=sha256:28545383d61f55b57cf4df63eebd9827754fd2dc25f80c5253f9184235db242c \ + --hash=sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2 \ + --hash=sha256:398a9e0c3eaceb34ec1aee71894ca3299605fa8e761544934378bbc6c97de23b \ + --hash=sha256:44246bab5dd4b7fbd3c0c80b6f16686808fab0e4aca819ade6e8d294a29c7050 \ + --hash=sha256:447d43819997825d4e71bf5769d869b968ce96848b6479397e29fc24c4a5dfe9 \ + --hash=sha256:67a3598f0a2dcbc58d02dd1928544e7d88f764b47d4a286202913f0b2801c2e7 \ + --hash=sha256:74480f79a023f90dc6e18febbf7b8bac7508420f2006fabd512013c0c238f454 \ + --hash=sha256:819559cafa1a373b7096a482b504ae8a857c89593cf3a25af743ac9ecbd23480 \ + --hash=sha256:899dc660cd599d7352d6f10d83c95df430a38b410c1b66b407a6b29265d66469 \ + --hash=sha256:8c0c984a1b8fef4086329ff8dd19ac77576b384079247c770f29cc8ce3afa06c \ + --hash=sha256:9aae4406ea63d825636cc11ffb34ad3379335803216ee3a856787bcf5ccc751e \ + --hash=sha256:a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db \ + --hash=sha256:b6cc7ba72a8850621bfec987cb72623e703b7fe2b9127a161ce61e61558ad905 \ + --hash=sha256:bf01b5720be110540be4286e791db73f84a2b721072a3711efff6c324cdf074b \ + --hash=sha256:c02ce36ec760252242a33967d51c289fd0e1c0e6e5cc9397e2279177716add86 \ + --hash=sha256:d9e4432ff660d67d775c66ac42a67cf2453c27cb4d738fc22cb53b5d84c135d4 \ + --hash=sha256:daa564862dd0d39c00f8086f88700fdbe8bc717e993a21e90711acfed02f2402 \ + --hash=sha256:de78575669dddf6099a8a0f46a27e82a1783c557ccc38ee620ed8cc96d3be7d7 \ + --hash=sha256:e64857f395505ebf3d2569935506ae0dfc4a15cb80dc25261176c784662cdcc4 \ + --hash=sha256:f4bd856d702e5b0d96a00ec6b307b0f51c1982c2bf9c0052cf9019e9a544ba99 \ + --hash=sha256:f4c42102bc82a51108e449cbb32b19b180022941c727bac0cfd50170341f16ee +psq==0.8.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:69608f691ecc5b8f0bfa633cf61d96db209342264d8f7d0833eda297a9cfe03c \ + --hash=sha256:c79de0aa7853799cb3dd06fa1b4076511aa9ec4e5db873a95001fc67abe8c381 +psutil==5.9.5 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d \ + --hash=sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217 \ + --hash=sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4 \ + --hash=sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c \ + --hash=sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f \ + --hash=sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da \ + --hash=sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4 \ + --hash=sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42 \ + --hash=sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5 \ + --hash=sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4 \ + --hash=sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9 \ + --hash=sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f \ + --hash=sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30 \ + --hash=sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48 +psycopg2-binary==2.9.9 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9 \ + --hash=sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77 \ + --hash=sha256:0c009475ee389757e6e34611d75f6e4f05f0cf5ebb76c6037508318e1a1e0d7e \ + --hash=sha256:0ef4854e82c09e84cc63084a9e4ccd6d9b154f1dbdd283efb92ecd0b5e2b8c84 \ + --hash=sha256:1236ed0952fbd919c100bc839eaa4a39ebc397ed1c08a97fc45fee2a595aa1b3 \ + --hash=sha256:143072318f793f53819048fdfe30c321890af0c3ec7cb1dfc9cc87aa88241de2 \ + --hash=sha256:15208be1c50b99203fe88d15695f22a5bed95ab3f84354c494bcb1d08557df67 \ + --hash=sha256:1873aade94b74715be2246321c8650cabf5a0d098a95bab81145ffffa4c13876 \ + --hash=sha256:18d0ef97766055fec15b5de2c06dd8e7654705ce3e5e5eed3b6651a1d2a9a152 \ + --hash=sha256:1ea665f8ce695bcc37a90ee52de7a7980be5161375d42a0b6c6abedbf0d81f0f \ + --hash=sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a \ + --hash=sha256:246b123cc54bb5361588acc54218c8c9fb73068bf227a4a531d8ed56fa3ca7d6 \ + --hash=sha256:275ff571376626195ab95a746e6a04c7df8ea34638b99fc11160de91f2fef503 \ + --hash=sha256:281309265596e388ef483250db3640e5f414168c5a67e9c665cafce9492eda2f \ + --hash=sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493 \ + --hash=sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996 \ + --hash=sha256:30dcc86377618a4c8f3b72418df92e77be4254d8f89f14b8e8f57d6d43603c0f \ + --hash=sha256:31a34c508c003a4347d389a9e6fcc2307cc2150eb516462a7a17512130de109e \ + --hash=sha256:323ba25b92454adb36fa425dc5cf6f8f19f78948cbad2e7bc6cdf7b0d7982e59 \ + --hash=sha256:34eccd14566f8fe14b2b95bb13b11572f7c7d5c36da61caf414d23b91fcc5d94 \ + --hash=sha256:3a58c98a7e9c021f357348867f537017057c2ed7f77337fd914d0bedb35dace7 \ + --hash=sha256:3f78fd71c4f43a13d342be74ebbc0666fe1f555b8837eb113cb7416856c79682 \ + --hash=sha256:4154ad09dac630a0f13f37b583eae260c6aa885d67dfbccb5b02c33f31a6d420 \ + --hash=sha256:420f9bbf47a02616e8554e825208cb947969451978dceb77f95ad09c37791dae \ + --hash=sha256:4686818798f9194d03c9129a4d9a702d9e113a89cb03bffe08c6cf799e053291 \ + --hash=sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe \ + --hash=sha256:60989127da422b74a04345096c10d416c2b41bd7bf2a380eb541059e4e999980 \ + --hash=sha256:68fc1f1ba168724771e38bee37d940d2865cb0f562380a1fb1ffb428b75cb692 \ + --hash=sha256:6e6f98446430fdf41bd36d4faa6cb409f5140c1c2cf58ce0bbdaf16af7d3f119 \ + --hash=sha256:729177eaf0aefca0994ce4cffe96ad3c75e377c7b6f4efa59ebf003b6d398716 \ + --hash=sha256:72dffbd8b4194858d0941062a9766f8297e8868e1dd07a7b36212aaa90f49472 \ + --hash=sha256:75723c3c0fbbf34350b46a3199eb50638ab22a0228f93fb472ef4d9becc2382b \ + --hash=sha256:77853062a2c45be16fd6b8d6de2a99278ee1d985a7bd8b103e97e41c034006d2 \ + --hash=sha256:78151aa3ec21dccd5cdef6c74c3e73386dcdfaf19bced944169697d7ac7482fc \ + --hash=sha256:7f01846810177d829c7692f1f5ada8096762d9172af1b1a28d4ab5b77c923c1c \ + --hash=sha256:804d99b24ad523a1fe18cc707bf741670332f7c7412e9d49cb5eab67e886b9b5 \ + --hash=sha256:8359bf4791968c5a78c56103702000105501adb557f3cf772b2c207284273984 \ + --hash=sha256:83791a65b51ad6ee6cf0845634859d69a038ea9b03d7b26e703f94c7e93dbcf9 \ + --hash=sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf \ + --hash=sha256:876801744b0dee379e4e3c38b76fc89f88834bb15bf92ee07d94acd06ec890a0 \ + --hash=sha256:8dbf6d1bc73f1d04ec1734bae3b4fb0ee3cb2a493d35ede9badbeb901fb40f6f \ + --hash=sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212 \ + --hash=sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb \ + --hash=sha256:977646e05232579d2e7b9c59e21dbe5261f403a88417f6a6512e70d3f8a046be \ + --hash=sha256:9dba73be7305b399924709b91682299794887cbbd88e38226ed9f6712eabee90 \ + --hash=sha256:a148c5d507bb9b4f2030a2025c545fccb0e1ef317393eaba42e7eabd28eb6041 \ + --hash=sha256:a6cdcc3ede532f4a4b96000b6362099591ab4a3e913d70bcbac2b56c872446f7 \ + --hash=sha256:ac05fb791acf5e1a3e39402641827780fe44d27e72567a000412c648a85ba860 \ + --hash=sha256:b58b4710c7f4161b5e9dcbe73bb7c62d65670a87df7bcce9e1faaad43e715245 \ + --hash=sha256:b6356793b84728d9d50ead16ab43c187673831e9d4019013f1402c41b1db9b27 \ + --hash=sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417 \ + --hash=sha256:bc7bb56d04601d443f24094e9e31ae6deec9ccb23581f75343feebaf30423359 \ + --hash=sha256:c2470da5418b76232f02a2fcd2229537bb2d5a7096674ce61859c3229f2eb202 \ + --hash=sha256:c332c8d69fb64979ebf76613c66b985414927a40f8defa16cf1bc028b7b0a7b0 \ + --hash=sha256:c6af2a6d4b7ee9615cbb162b0738f6e1fd1f5c3eda7e5da17861eacf4c717ea7 \ + --hash=sha256:c77e3d1862452565875eb31bdb45ac62502feabbd53429fdc39a1cc341d681ba \ + --hash=sha256:ca08decd2697fdea0aea364b370b1249d47336aec935f87b8bbfd7da5b2ee9c1 \ + --hash=sha256:ca49a8119c6cbd77375ae303b0cfd8c11f011abbbd64601167ecca18a87e7cdd \ + --hash=sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07 \ + --hash=sha256:d2997c458c690ec2bc6b0b7ecbafd02b029b7b4283078d3b32a852a7ce3ddd98 \ + --hash=sha256:d3f82c171b4ccd83bbaf35aa05e44e690113bd4f3b7b6cc54d2219b132f3ae55 \ + --hash=sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d \ + --hash=sha256:ead20f7913a9c1e894aebe47cccf9dc834e1618b7aa96155d2091a626e59c972 \ + --hash=sha256:ebdc36bea43063116f0486869652cb2ed7032dbc59fbcb4445c4862b5c1ecf7f \ + --hash=sha256:ed1184ab8f113e8d660ce49a56390ca181f2981066acc27cf637d5c1e10ce46e \ + --hash=sha256:ee825e70b1a209475622f7f7b776785bd68f34af6e7a46e2e42f27b659b5bc26 \ + --hash=sha256:f7ae5d65ccfbebdfa761585228eb4d0df3a8b15cfb53bd953e713e09fbb12957 \ + --hash=sha256:f7fc5a5acafb7d6ccca13bfa8c90f8c51f13d8fb87d95656d3950f0158d3ce53 \ + --hash=sha256:f9b5571d33660d5009a8b3c25dc1db560206e2d2f89d3df1cb32d72c0d117d52 +puremagic==1.15 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:349e179f04bcc14eb0e2c3941cd9ee4ea74881ab6ccac63ea0c37c98f7a80b22 \ + --hash=sha256:6e46aa78113a466abc9f69e6e8a4ce90eb57d908dafb809597012621061462bd +pyasn1-modules==0.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c \ + --hash=sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d +pyasn1==0.5.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57 \ + --hash=sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde +pycparser==2.21 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ + --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 +pycryptodome==3.19.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0101f647d11a1aae5a8ce4f5fad6644ae1b22bb65d05accc7d322943c69a74a6 \ + --hash=sha256:04dd31d3b33a6b22ac4d432b3274588917dcf850cc0c51c84eca1d8ed6933810 \ + --hash=sha256:05e33267394aad6db6595c0ce9d427fe21552f5425e116a925455e099fdf759a \ + --hash=sha256:08ce3558af5106c632baf6d331d261f02367a6bc3733086ae43c0f988fe042db \ + --hash=sha256:139ae2c6161b9dd5d829c9645d781509a810ef50ea8b657e2257c25ca20efe33 \ + --hash=sha256:17940dcf274fcae4a54ec6117a9ecfe52907ed5e2e438fe712fe7ca502672ed5 \ + --hash=sha256:190c53f51e988dceb60472baddce3f289fa52b0ec38fbe5fd20dd1d0f795c551 \ + --hash=sha256:22e0ae7c3a7f87dcdcf302db06ab76f20e83f09a6993c160b248d58274473bfa \ + --hash=sha256:3006c44c4946583b6de24fe0632091c2653d6256b99a02a3db71ca06472ea1e4 \ + --hash=sha256:45430dfaf1f421cf462c0dd824984378bef32b22669f2635cb809357dbaab405 \ + --hash=sha256:506c686a1eee6c00df70010be3b8e9e78f406af4f21b23162bbb6e9bdf5427bc \ + --hash=sha256:536f676963662603f1f2e6ab01080c54d8cd20f34ec333dcb195306fa7826997 \ + --hash=sha256:542f99d5026ac5f0ef391ba0602f3d11beef8e65aae135fa5b762f5ebd9d3bfb \ + --hash=sha256:560591c0777f74a5da86718f70dfc8d781734cf559773b64072bbdda44b3fc3e \ + --hash=sha256:5b1986c761258a5b4332a7f94a83f631c1ffca8747d75ab8395bf2e1b93283d9 \ + --hash=sha256:61bb3ccbf4bf32ad9af32da8badc24e888ae5231c617947e0f5401077f8b091f \ + --hash=sha256:7822f36d683f9ad7bc2145b2c2045014afdbbd1d9922a6d4ce1cbd6add79a01e \ + --hash=sha256:7919ccd096584b911f2a303c593280869ce1af9bf5d36214511f5e5a1bed8c34 \ + --hash=sha256:7c760c8a0479a4042111a8dd2f067d3ae4573da286c53f13cf6f5c53a5c1f631 \ + --hash=sha256:829b813b8ee00d9c8aba417621b94bc0b5efd18c928923802ad5ba4cf1ec709c \ + --hash=sha256:84c3e4fffad0c4988aef0d5591be3cad4e10aa7db264c65fadbc633318d20bde \ + --hash=sha256:8999316e57abcbd8085c91bc0ef75292c8618f41ca6d2b6132250a863a77d1e7 \ + --hash=sha256:8c1601e04d32087591d78e0b81e1e520e57a92796089864b20e5f18c9564b3fa \ + --hash=sha256:a0ab84755f4539db086db9ba9e9f3868d2e3610a3948cbd2a55e332ad83b01b0 \ + --hash=sha256:a9bcd5f3794879e91970f2bbd7d899780541d3ff439d8f2112441769c9f2ccea \ + --hash=sha256:bc35d463222cdb4dbebd35e0784155c81e161b9284e567e7e933d722e533331e \ + --hash=sha256:c1cc2f2ae451a676def1a73c1ae9120cd31af25db3f381893d45f75e77be2400 \ + --hash=sha256:d033947e7fd3e2ba9a031cb2d267251620964705a013c5a461fa5233cc025270 \ + --hash=sha256:d04f5f623a280fbd0ab1c1d8ecbd753193ab7154f09b6161b0f857a1a676c15f \ + --hash=sha256:d49a6c715d8cceffedabb6adb7e0cbf41ae1a2ff4adaeec9432074a80627dea1 \ + --hash=sha256:e249a784cc98a29c77cea9df54284a44b40cafbfae57636dd2f8775b48af2434 \ + --hash=sha256:fc7a79590e2b5d08530175823a242de6790abc73638cc6dc9d2684e7be2f5e49 +pycryptodomex==3.19.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:09c9401dc06fb3d94cb1ec23b4ea067a25d1f4c6b7b118ff5631d0b5daaab3cc \ + --hash=sha256:0b2f1982c5bc311f0aab8c293524b861b485d76f7c9ab2c3ac9a25b6f7655975 \ + --hash=sha256:136b284e9246b4ccf4f752d435c80f2c44fc2321c198505de1d43a95a3453b3c \ + --hash=sha256:1789d89f61f70a4cd5483d4dfa8df7032efab1118f8b9894faae03c967707865 \ + --hash=sha256:2126bc54beccbede6eade00e647106b4f4c21e5201d2b0a73e9e816a01c50905 \ + --hash=sha256:258c4233a3fe5a6341780306a36c6fb072ef38ce676a6d41eec3e591347919e8 \ + --hash=sha256:263de9a96d2fcbc9f5bd3a279f14ea0d5f072adb68ebd324987576ec25da084d \ + --hash=sha256:50cb18d4dd87571006fd2447ccec85e6cec0136632a550aa29226ba075c80644 \ + --hash=sha256:5b883e1439ab63af976656446fb4839d566bb096f15fc3c06b5a99cde4927188 \ + --hash=sha256:5d73e9fa3fe830e7b6b42afc49d8329b07a049a47d12e0ef9225f2fd220f19b2 \ + --hash=sha256:61056a1fd3254f6f863de94c233b30dd33bc02f8c935b2000269705f1eeeffa4 \ + --hash=sha256:67c8eb79ab33d0fbcb56842992298ddb56eb6505a72369c20f60bc1d2b6fb002 \ + --hash=sha256:6e45bb4635b3c4e0a00ca9df75ef6295838c85c2ac44ad882410cb631ed1eeaa \ + --hash=sha256:7cb51096a6a8d400724104db8a7e4f2206041a1f23e58924aa3d8d96bcb48338 \ + --hash=sha256:800a2b05cfb83654df80266692f7092eeefe2a314fa7901dcefab255934faeec \ + --hash=sha256:8df69e41f7e7015a90b94d1096ec3d8e0182e73449487306709ec27379fff761 \ + --hash=sha256:917033016ecc23c8933205585a0ab73e20020fdf671b7cd1be788a5c4039840b \ + --hash=sha256:a12144d785518f6491ad334c75ccdc6ad52ea49230b4237f319dbb7cef26f464 \ + --hash=sha256:a3866d68e2fc345162b1b9b83ef80686acfe5cec0d134337f3b03950a0a8bf56 \ + --hash=sha256:a588a1cb7781da9d5e1c84affd98c32aff9c89771eac8eaa659d2760666f7139 \ + --hash=sha256:a77b79852175064c822b047fee7cf5a1f434f06ad075cc9986aa1c19a0c53eb0 \ + --hash=sha256:af83a554b3f077564229865c45af0791be008ac6469ef0098152139e6bd4b5b6 \ + --hash=sha256:b801216c48c0886742abf286a9a6b117e248ca144d8ceec1f931ce2dd0c9cb40 \ + --hash=sha256:bfb040b5dda1dff1e197d2ef71927bd6b8bfcb9793bc4dfe0bb6df1e691eaacb \ + --hash=sha256:c01678aee8ac0c1a461cbc38ad496f953f9efcb1fa19f5637cbeba7544792a53 \ + --hash=sha256:c74eb1f73f788facece7979ce91594dc177e1a9b5d5e3e64697dd58299e5cb4d \ + --hash=sha256:c9a68a2f7bd091ccea54ad3be3e9d65eded813e6d79fdf4cc3604e26cdd6384f \ + --hash=sha256:d4dd3b381ff5a5907a3eb98f5f6d32c64d319a840278ceea1dcfcc65063856f3 \ + --hash=sha256:e8e5ecbd4da4157889fce8ba49da74764dd86c891410bfd6b24969fa46edda51 \ + --hash=sha256:eb2fc0ec241bf5e5ef56c8fbec4a2634d631e4c4f616a59b567947a0f35ad83c \ + --hash=sha256:edbe083c299835de7e02c8aa0885cb904a75087d35e7bab75ebe5ed336e8c3e2 \ + --hash=sha256:ff64fd720def623bf64d8776f8d0deada1cc1bf1ec3c1f9d6f5bb5bd098d034f +pydantic==1.10.5 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1fd326aff5d6c36f05735c7c9b3d5b0e933b4ca52ad0b6e4b38038d82703d35b \ + --hash=sha256:2185a3b3d98ab4506a3f6707569802d2d92c3a7ba3a9a35683a7709ea6c2aaa2 \ + --hash=sha256:261f357f0aecda005934e413dfd7aa4077004a174dafe414a8325e6098a8e419 \ + --hash=sha256:305d0376c516b0dfa1dbefeae8c21042b57b496892d721905a6ec6b79494a66d \ + --hash=sha256:3257bd714de9db2102b742570a56bf7978e90441193acac109b1f500290f5718 \ + --hash=sha256:3353072625ea2a9a6c81ad01b91e5c07fa70deb06368c71307529abf70d23325 \ + --hash=sha256:36e44a4de37b8aecffa81c081dbfe42c4d2bf9f6dff34d03dce157ec65eb0f15 \ + --hash=sha256:3bb99cf9655b377db1a9e47fa4479e3330ea96f4123c6c8200e482704bf1eda2 \ + --hash=sha256:3f9d9b2be177c3cb6027cd67fbf323586417868c06c3c85d0d101703136e6b31 \ + --hash=sha256:45edea10b75d3da43cfda12f3792833a3fa70b6eee4db1ed6aed528cef17c74e \ + --hash=sha256:51782fd81f09edcf265823c3bf43ff36d00db246eca39ee765ef58dc8421a642 \ + --hash=sha256:532e97c35719f137ee5405bd3eeddc5c06eb91a032bc755a44e34a712420daf3 \ + --hash=sha256:58e41dd1e977531ac6073b11baac8c013f3cd8706a01d3dc74e86955be8b2c0c \ + --hash=sha256:5920824fe1e21cbb3e38cf0f3dd24857c8959801d1031ce1fac1d50857a03bfb \ + --hash=sha256:5f3bc8f103b56a8c88021d481410874b1f13edf6e838da607dcb57ecff9b4594 \ + --hash=sha256:63200cd8af1af2c07964546b7bc8f217e8bda9d0a2ef0ee0c797b36353914984 \ + --hash=sha256:663d2dd78596c5fa3eb996bc3f34b8c2a592648ad10008f98d1348be7ae212fb \ + --hash=sha256:6a4b0aab29061262065bbdede617ef99cc5914d1bf0ddc8bcd8e3d7928d85bd6 \ + --hash=sha256:6bb0452d7b8516178c969d305d9630a3c9b8cf16fcf4713261c9ebd465af0d73 \ + --hash=sha256:72ef3783be8cbdef6bca034606a5de3862be6b72415dc5cb1fb8ddbac110049a \ + --hash=sha256:76c930ad0746c70f0368c4596020b736ab65b473c1f9b3872310a835d852eb19 \ + --hash=sha256:7c5b94d598c90f2f46b3a983ffb46ab806a67099d118ae0da7ef21a2a4033b28 \ + --hash=sha256:7ce1612e98c6326f10888df951a26ec1a577d8df49ddcaea87773bfbe23ba5cc \ + --hash=sha256:8481dca324e1c7b715ce091a698b181054d22072e848b6fc7895cd86f79b4449 \ + --hash=sha256:87f831e81ea0589cd18257f84386bf30154c5f4bed373b7b75e5cb0b5d53ea87 \ + --hash=sha256:9a9d9155e2a9f38b2eb9374c88f02fd4d6851ae17b65ee786a87d032f87008f8 \ + --hash=sha256:9e337ac83686645a46db0e825acceea8e02fca4062483f40e9ae178e8bd1103a \ + --hash=sha256:b429f7c457aebb7fbe7cd69c418d1cd7c6fdc4d3c8697f45af78b8d5a7955760 \ + --hash=sha256:b473d00ccd5c2061fd896ac127b7755baad233f8d996ea288af14ae09f8e0d1e \ + --hash=sha256:bd46a0e6296346c477e59a954da57beaf9c538da37b9df482e50f836e4a7d4bb \ + --hash=sha256:c428c0f64a86661fb4873495c4fac430ec7a7cef2b8c1c28f3d1a7277f9ea5ab \ + --hash=sha256:c9e5b778b6842f135902e2d82624008c6a79710207e28e86966cd136c621bfee \ + --hash=sha256:ca9075ab3de9e48b75fa8ccb897c34ccc1519177ad8841d99f7fd74cf43be5bf \ + --hash=sha256:f582cac9d11c227c652d3ce8ee223d94eb06f4228b52a8adaafa9fa62e73d5c9 \ + --hash=sha256:f5bee6c523d13944a1fdc6f0525bc86dbbd94372f17b83fa6331aabacc8fd08e \ + --hash=sha256:f836444b4c5ece128b23ec36a446c9ab7f9b0f7981d0d27e13a7c366ee163f8a +pyhindsight==20230327.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:65bcd250b8ff0a32f5fd360a62e2d3fa2b9dbbe461bd9c15300b60ce7e13879d \ + --hash=sha256:f2ac1279def87f8e44804c2b530c3f58caaf0145a017d436ce732a98f6bc2cf5 +pyjwt==2.8.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de \ + --hash=sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320 +pyjwt[crypto]==2.8.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de \ + --hash=sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320 +pyopenssl==23.2.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2 \ + --hash=sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac +pyparsing==3.0.9 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ + --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc +pytest==7.4.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002 \ + --hash=sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069 +python-dateutil==2.8.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \ + --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 +python-dotenv==1.0.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba \ + --hash=sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a +python-multipart==0.0.6 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:e9925a80bb668529f1b67c7fdb0a5dacdd7cbfc6fb0bff3ea443fe22bdd62132 \ + --hash=sha256:ee698bab5ef148b0a760751c261902cd096e57e10558e11aca17646b74ee1c18 +pytsk3==20230125 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4406a88490afcc649cd44aa3e8bd5e8b0767822c17c50cf6c6898fbb9605ac42 +pytz==2023.3.post1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b \ + --hash=sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7 +pywin32-ctypes==0.2.2 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32" \ + --hash=sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60 \ + --hash=sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7 +pywin32==306 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "win32" or platform_system == "Windows") \ + --hash=sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d \ + --hash=sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65 \ + --hash=sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e \ + --hash=sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b \ + --hash=sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4 \ + --hash=sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040 \ + --hash=sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a \ + --hash=sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36 \ + --hash=sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8 \ + --hash=sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e \ + --hash=sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802 \ + --hash=sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a \ + --hash=sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407 \ + --hash=sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0 +pyxattr==0.8.1 ; python_version >= "3.10" and python_version < "4.0" and platform_system != "Windows" \ + --hash=sha256:48c578ecf8ea0bd4351b1752470e301a90a3761c7c21f00f953dcf6d6fa6ee5a +pyyaml==6.0.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ + --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ + --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ + --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ + --hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \ + --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ + --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ + --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ + --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ + --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ + --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ + --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ + --hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \ + --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ + --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ + --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ + --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ + --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ + --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ + --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ + --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ + --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ + --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ + --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ + --hash=sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0 \ + --hash=sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515 \ + --hash=sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c \ + --hash=sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c \ + --hash=sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924 \ + --hash=sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34 \ + --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ + --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ + --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ + --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ + --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ + --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ + --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ + --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ + --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ + --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f +pyzmq==25.1.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a \ + --hash=sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf \ + --hash=sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45 \ + --hash=sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505 \ + --hash=sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2 \ + --hash=sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e \ + --hash=sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f \ + --hash=sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2 \ + --hash=sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55 \ + --hash=sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd \ + --hash=sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2 \ + --hash=sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf \ + --hash=sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae \ + --hash=sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a \ + --hash=sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5 \ + --hash=sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222 \ + --hash=sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0 \ + --hash=sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b \ + --hash=sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23 \ + --hash=sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618 \ + --hash=sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062 \ + --hash=sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9 \ + --hash=sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414 \ + --hash=sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2 \ + --hash=sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a \ + --hash=sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f \ + --hash=sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa \ + --hash=sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123 \ + --hash=sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790 \ + --hash=sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb \ + --hash=sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76 \ + --hash=sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0 \ + --hash=sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6 \ + --hash=sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3 \ + --hash=sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978 \ + --hash=sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a \ + --hash=sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb \ + --hash=sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1 \ + --hash=sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6 \ + --hash=sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995 \ + --hash=sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7 \ + --hash=sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f \ + --hash=sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304 \ + --hash=sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e \ + --hash=sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e \ + --hash=sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849 \ + --hash=sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329 \ + --hash=sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71 \ + --hash=sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728 \ + --hash=sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115 \ + --hash=sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752 \ + --hash=sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8 \ + --hash=sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a \ + --hash=sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c \ + --hash=sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8 \ + --hash=sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8 \ + --hash=sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83 \ + --hash=sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c \ + --hash=sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69 \ + --hash=sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a \ + --hash=sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996 \ + --hash=sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3 \ + --hash=sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6 \ + --hash=sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369 \ + --hash=sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28 \ + --hash=sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075 \ + --hash=sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0 \ + --hash=sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c \ + --hash=sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca \ + --hash=sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9 \ + --hash=sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800 \ + --hash=sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6 \ + --hash=sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb \ + --hash=sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d \ + --hash=sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22 \ + --hash=sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb \ + --hash=sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71 \ + --hash=sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83 \ + --hash=sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae \ + --hash=sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb \ + --hash=sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d \ + --hash=sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2 \ + --hash=sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0 \ + --hash=sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7 \ + --hash=sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008 \ + --hash=sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762 \ + --hash=sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec \ + --hash=sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef \ + --hash=sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180 \ + --hash=sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787 \ + --hash=sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e \ + --hash=sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7 \ + --hash=sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4 +redis==4.4.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:68226f7ede928db8302f29ab088a157f41061fa946b7ae865452b6d7838bbffb \ + --hash=sha256:da92a39fec86438d3f1e2a1db33c312985806954fe860120b582a8430e231d8f +requests-oauthlib==1.3.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5 \ + --hash=sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a +requests==2.31.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 +rsa==4.9 ; python_version >= "3.10" and python_version < "4" \ + --hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 \ + --hash=sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21 +s3transfer==0.7.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:10d6923c6359175f264811ef4bf6161a3156ce8e350e705396a7557d6293c33a \ + --hash=sha256:fd3889a66f5fe17299fe75b82eae6cf722554edca744ca5d5fe308b104883d2e +secretstorage==3.3.3 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "linux" \ + --hash=sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77 \ + --hash=sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99 +setuptools==68.2.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87 \ + --hash=sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a +six==1.16.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 +sniffio==1.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101 \ + --hash=sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384 +sortedcontainers==2.4.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ + --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +sshpubkeys==3.3.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:3020ed4f8c846849299370fbe98ff4157b0ccc1accec105e07cfa9ae4bb55064 \ + --hash=sha256:946f76b8fe86704b0e7c56a00d80294e39bc2305999844f079a217885060b1ac +starlette==0.27.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75 \ + --hash=sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91 +tabulate==0.9.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c \ + --hash=sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f +tomli==2.0.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f +typing-extensions==4.8.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \ + --hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef +typing-inspect==0.9.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f \ + --hash=sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78 +tzdata==2023.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a \ + --hash=sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda +ujson==5.8.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c \ + --hash=sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7 \ + --hash=sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903 \ + --hash=sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c \ + --hash=sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5 \ + --hash=sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296 \ + --hash=sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f \ + --hash=sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3 \ + --hash=sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4 \ + --hash=sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207 \ + --hash=sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6 \ + --hash=sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb \ + --hash=sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e \ + --hash=sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130 \ + --hash=sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721 \ + --hash=sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0 \ + --hash=sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3 \ + --hash=sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc \ + --hash=sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a \ + --hash=sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916 \ + --hash=sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8 \ + --hash=sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6 \ + --hash=sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405 \ + --hash=sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c \ + --hash=sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042 \ + --hash=sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7 \ + --hash=sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425 \ + --hash=sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3 \ + --hash=sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30 \ + --hash=sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282 \ + --hash=sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a \ + --hash=sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a \ + --hash=sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75 \ + --hash=sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07 \ + --hash=sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08 \ + --hash=sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582 \ + --hash=sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9 \ + --hash=sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c \ + --hash=sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba \ + --hash=sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879 \ + --hash=sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94 \ + --hash=sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b \ + --hash=sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67 \ + --hash=sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f \ + --hash=sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2 \ + --hash=sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564 \ + --hash=sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76 \ + --hash=sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109 \ + --hash=sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7 \ + --hash=sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377 \ + --hash=sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5 \ + --hash=sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa \ + --hash=sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b \ + --hash=sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83 \ + --hash=sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec \ + --hash=sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf \ + --hash=sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae \ + --hash=sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95 \ + --hash=sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1 \ + --hash=sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f \ + --hash=sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c +uritemplate==4.1.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0 \ + --hash=sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e +urllib3==1.26.17 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:24d6a242c28d29af46c3fae832c36db3bbebcc533dd1bb549172cd739c82df21 \ + --hash=sha256:94a757d178c9be92ef5539b8840d48dc9cf1b2709c9d6b588232a055c524458b +uvicorn[standard]==0.23.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1f9be6558f01239d4fdf22ef8126c39cb1ad0addf76c40e760549d2c2f43ab53 \ + --hash=sha256:4d3cc12d7727ba72b64d12d3cc7743124074c0a69f7b201512fc50c3e3f1569a +uvloop==0.17.0 ; (sys_platform != "win32" and sys_platform != "cygwin") and platform_python_implementation != "PyPy" and python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0949caf774b9fcefc7c5756bacbbbd3fc4c05a6b7eebc7c7ad6f825b23998d6d \ + --hash=sha256:0ddf6baf9cf11a1a22c71487f39f15b2cf78eb5bde7e5b45fbb99e8a9d91b9e1 \ + --hash=sha256:1436c8673c1563422213ac6907789ecb2b070f5939b9cbff9ef7113f2b531595 \ + --hash=sha256:23609ca361a7fc587031429fa25ad2ed7242941adec948f9d10c045bfecab06b \ + --hash=sha256:2a6149e1defac0faf505406259561bc14b034cdf1d4711a3ddcdfbaa8d825a05 \ + --hash=sha256:2deae0b0fb00a6af41fe60a675cec079615b01d68beb4cc7b722424406b126a8 \ + --hash=sha256:307958f9fc5c8bb01fad752d1345168c0abc5d62c1b72a4a8c6c06f042b45b20 \ + --hash=sha256:30babd84706115626ea78ea5dbc7dd8d0d01a2e9f9b306d24ca4ed5796c66ded \ + --hash=sha256:3378eb62c63bf336ae2070599e49089005771cc651c8769aaad72d1bd9385a7c \ + --hash=sha256:3d97672dc709fa4447ab83276f344a165075fd9f366a97b712bdd3fee05efae8 \ + --hash=sha256:3db8de10ed684995a7f34a001f15b374c230f7655ae840964d51496e2f8a8474 \ + --hash=sha256:3ebeeec6a6641d0adb2ea71dcfb76017602ee2bfd8213e3fcc18d8f699c5104f \ + --hash=sha256:45cea33b208971e87a31c17622e4b440cac231766ec11e5d22c76fab3bf9df62 \ + --hash=sha256:6708f30db9117f115eadc4f125c2a10c1a50d711461699a0cbfaa45b9a78e376 \ + --hash=sha256:68532f4349fd3900b839f588972b3392ee56042e440dd5873dfbbcd2cc67617c \ + --hash=sha256:6aafa5a78b9e62493539456f8b646f85abc7093dd997f4976bb105537cf2635e \ + --hash=sha256:7d37dccc7ae63e61f7b96ee2e19c40f153ba6ce730d8ba4d3b4e9738c1dccc1b \ + --hash=sha256:864e1197139d651a76c81757db5eb199db8866e13acb0dfe96e6fc5d1cf45fc4 \ + --hash=sha256:8887d675a64cfc59f4ecd34382e5b4f0ef4ae1da37ed665adba0c2badf0d6578 \ + --hash=sha256:8efcadc5a0003d3a6e887ccc1fb44dec25594f117a94e3127954c05cf144d811 \ + --hash=sha256:9b09e0f0ac29eee0451d71798878eae5a4e6a91aa275e114037b27f7db72702d \ + --hash=sha256:a4aee22ece20958888eedbad20e4dbb03c37533e010fb824161b4f05e641f738 \ + --hash=sha256:a5abddb3558d3f0a78949c750644a67be31e47936042d4f6c888dd6f3c95f4aa \ + --hash=sha256:c092a2c1e736086d59ac8e41f9c98f26bbf9b9222a76f21af9dfe949b99b2eb9 \ + --hash=sha256:c686a47d57ca910a2572fddfe9912819880b8765e2f01dc0dd12a9bf8573e539 \ + --hash=sha256:cbbe908fda687e39afd6ea2a2f14c2c3e43f2ca88e3a11964b297822358d0e6c \ + --hash=sha256:ce9f61938d7155f79d3cb2ffa663147d4a76d16e08f65e2c66b77bd41b356718 \ + --hash=sha256:dbbaf9da2ee98ee2531e0c780455f2841e4675ff580ecf93fe5c48fe733b5667 \ + --hash=sha256:f1e507c9ee39c61bfddd79714e4f85900656db1aec4d40c6de55648e85c2799c \ + --hash=sha256:ff3d00b70ce95adce264462c930fbaecb29718ba6563db354608f37e49e09024 +vine==5.0.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4c9dceab6f76ed92105027c49c823800dd33cacce13bdedc5b914e3514b7fb30 \ + --hash=sha256:7d3b1624a953da82ef63462013bbd271d3eb75751489f9807598e8f340bd637e +watchfiles==0.20.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:007dcc4a401093010b389c044e81172c8a2520dba257c88f8828b3d460c6bb38 \ + --hash=sha256:08dc702529bb06a2b23859110c214db245455532da5eaea602921687cfcd23db \ + --hash=sha256:0d82dbc1832da83e441d112069833eedd4cf583d983fb8dd666fbefbea9d99c0 \ + --hash=sha256:13f995d5152a8ba4ed7c2bbbaeee4e11a5944defc7cacd0ccb4dcbdcfd78029a \ + --hash=sha256:3796312bd3587e14926013612b23066912cf45a14af71cf2b20db1c12dadf4e9 \ + --hash=sha256:5392dd327a05f538c56edb1c6ebba6af91afc81b40822452342f6da54907bbdf \ + --hash=sha256:570848706440373b4cd8017f3e850ae17f76dbdf1e9045fc79023b11e1afe490 \ + --hash=sha256:608cd94a8767f49521901aff9ae0c92cc8f5a24d528db7d6b0295290f9d41193 \ + --hash=sha256:728575b6b94c90dd531514677201e8851708e6e4b5fe7028ac506a200b622019 \ + --hash=sha256:7d4e66a857621584869cfbad87039e65dadd7119f0d9bb9dbc957e089e32c164 \ + --hash=sha256:835df2da7a5df5464c4a23b2d963e1a9d35afa422c83bf4ff4380b3114603644 \ + --hash=sha256:87d9e1f75c4f86c93d73b5bd1ebe667558357548f11b4f8af4e0e272f79413ce \ + --hash=sha256:89d1de8218874925bce7bb2ae9657efc504411528930d7a83f98b1749864f2ef \ + --hash=sha256:99f4c65fd2fce61a571b2a6fcf747d6868db0bef8a934e8ca235cc8533944d95 \ + --hash=sha256:9a0351d20d03c6f7ad6b2e8a226a5efafb924c7755ee1e34f04c77c3682417fa \ + --hash=sha256:9b5c8d3be7b502f8c43a33c63166ada8828dbb0c6d49c8f9ce990a96de2f5a49 \ + --hash=sha256:a03d1e6feb7966b417f43c3e3783188167fd69c2063e86bad31e62c4ea794cc5 \ + --hash=sha256:b17d4176c49d207865630da5b59a91779468dd3e08692fe943064da260de2c7c \ + --hash=sha256:d0002d81c89a662b595645fb684a371b98ff90a9c7d8f8630c82f0fde8310458 \ + --hash=sha256:d97db179f7566dcf145c5179ddb2ae2a4450e3a634eb864b09ea04e68c252e8e \ + --hash=sha256:e43af4464daa08723c04b43cf978ab86cc55c684c16172622bdac64b34e36af0 \ + --hash=sha256:eccc8942bcdc7d638a01435d915b913255bbd66f018f1af051cd8afddb339ea3 +wcwidth==0.2.8 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:77f719e01648ed600dfa5402c347481c0992263b81a027344f3e1ba25493a704 \ + --hash=sha256:8705c569999ffbb4f6a87c6d1b80f324bd6db952f5eb0b95bc07517f4c1813d4 +websocket-client==1.6.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:3aad25d31284266bcfcfd1fd8a743f63282305a364b8d0948a43bd606acc652f \ + --hash=sha256:6cfc30d051ebabb73a5fa246efdcc14c8fbebbd0330f8984ac3bb6d9edd2ad03 +websockets==11.0.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd \ + --hash=sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f \ + --hash=sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998 \ + --hash=sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82 \ + --hash=sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788 \ + --hash=sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa \ + --hash=sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f \ + --hash=sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4 \ + --hash=sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7 \ + --hash=sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f \ + --hash=sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd \ + --hash=sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69 \ + --hash=sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb \ + --hash=sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b \ + --hash=sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016 \ + --hash=sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac \ + --hash=sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4 \ + --hash=sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb \ + --hash=sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99 \ + --hash=sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e \ + --hash=sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54 \ + --hash=sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf \ + --hash=sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007 \ + --hash=sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3 \ + --hash=sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6 \ + --hash=sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86 \ + --hash=sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1 \ + --hash=sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61 \ + --hash=sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11 \ + --hash=sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8 \ + --hash=sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f \ + --hash=sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931 \ + --hash=sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526 \ + --hash=sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016 \ + --hash=sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae \ + --hash=sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd \ + --hash=sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b \ + --hash=sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311 \ + --hash=sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af \ + --hash=sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152 \ + --hash=sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288 \ + --hash=sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de \ + --hash=sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97 \ + --hash=sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d \ + --hash=sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d \ + --hash=sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca \ + --hash=sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0 \ + --hash=sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9 \ + --hash=sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b \ + --hash=sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e \ + --hash=sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128 \ + --hash=sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d \ + --hash=sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c \ + --hash=sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5 \ + --hash=sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6 \ + --hash=sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b \ + --hash=sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b \ + --hash=sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280 \ + --hash=sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c \ + --hash=sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c \ + --hash=sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f \ + --hash=sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20 \ + --hash=sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8 \ + --hash=sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb \ + --hash=sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602 \ + --hash=sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf \ + --hash=sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0 \ + --hash=sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74 \ + --hash=sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0 \ + --hash=sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564 +werkzeug==0.16.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1e0dedc2acb1f46827daa2e399c1485c8fa17c0d8e70b6b875b4e7f54bf408d2 \ + --hash=sha256:b353856d37dec59d6511359f97f6a4b2468442e454bd1c98298ddce53cac1f04 +xlsxwriter==3.1.6 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2087abdaa4a5e981a3ae50b5c21ff1adae59c8fecb6157808585fc169a6bfcd9 \ + --hash=sha256:fc3838232f9f50763c1e81a3b381c6ad559dcdcd0983ee239bf54556392b4f3f +yapf==0.40.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4dab8a5ed7134e26d57c1647c7483afb3f136878b579062b786c9ba16b94637b \ + --hash=sha256:adc8b5dd02c0143108878c499284205adb258aad6db6634e5b869e7ee2bd548b +yara-python==4.3.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:51f1bdbcdbcfa29a7a2cf7e7e5d6a7d8dbd00568e4ab6103adceda5a499895a6 \ + --hash=sha256:7af4354ee0f1561f51fd01771a121d8d385b93bbc6138a25a38ce68aa6801c2c \ + --hash=sha256:834d8fe2cdb5cf61d5e505d32c504b62891df5ce5af9f04dbd8c7575c1dbef30 \ + --hash=sha256:8847bb5e74d2b33cf48f372bed02805876ab2e414aa7fd50c16a7c6150316601 \ + --hash=sha256:950377dd53d17870f66406f0db9ed9f6b04ac7e61c7f6fd5429459e2a00fd874 \ + --hash=sha256:c032ad4ec6698a4f485b3d9721e6223028953bb61362482bdd7eabb147271e80 \ + --hash=sha256:c8663f75f0c5f82e0f6053c9ddbddd97f956787bffb7f64cac1e40e0a21db89c \ + --hash=sha256:ec05d0b7cc46728119d450875382d5386305510b8cfb14bad3627060c9e6f199 \ + --hash=sha256:f0b7b2ea840638415a075a25860dbcb6466d83000a8367196188a6367b01af71 \ + --hash=sha256:fbf8281a6eb538b5c219a9c54c65a910806e7adf28a7d878f2cff551cbbd43ea \ + --hash=sha256:fd70fe0ba522d4ecd73cbf45e528872844e61e2febe8f66e8a94c2674751b831 +zipp==3.17.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 \ + --hash=sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 diff --git a/requirements-worker.txt b/requirements-worker.txt new file mode 100644 index 000000000..f495243c3 --- /dev/null +++ b/requirements-worker.txt @@ -0,0 +1,1583 @@ +acstore==20230519 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:b9f6d7b1609b9758fc0944ec25e443de0bd1acb6957388c2de5acc641e13d808 +adal==1.2.7 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2a7451ed7441ddbc57703042204a3e30ef747478eea022c70f789fc7f084bc3d \ + --hash=sha256:d74f45b81317454d96e982fd1c50e6fb5c99ac2223728aea8764433a39f566f1 +amqp==5.1.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2c1b13fecc0893e946c65cbd5f36427861cffa4ea2201d8f6fca22e2a373b5e2 \ + --hash=sha256:6f0956d2c23d8fa6e7691934d8c3930eadb44972cbbd1a7ae3a520f735d43359 +anyio==4.0.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f \ + --hash=sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a +artifacts==20230928 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:b918f2977e5797e06e4df111351ba6b26d8b7446a0eb64eec6b2f3fa7df1cb8f +async-timeout==4.0.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f \ + --hash=sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028 +azure-common==1.1.28 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4ac0cd3214e36b6a1b6a442686722a5d8cc449603aa833f3f0f40bda836704a3 \ + --hash=sha256:5c12d3dcf4ec20599ca6b0d3e09e86e146353d443e7fcc050c9a19c1f9df20ad +azure-core==1.29.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:500b3aa9bf2e90c5ccc88bb105d056114ca0ce7d0ce73afb8bc4d714b2fc7568 \ + --hash=sha256:b03261bcba22c0b9290faf9999cedd23e849ed2577feee90515694cea6bc74bf +azure-identity==1.14.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:72441799f8c5c89bfe21026965e266672a7c5d050c2c65119ef899dd5362e2b1 \ + --hash=sha256:edabf0e010eb85760e1dd19424d5e8f97ba2c9caff73a16e7b30ccbdbcce369b +azure-mgmt-compute==23.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:49dbb0f51006d557cbd0b22999cb9ecf3eabc2be46d96efcc6d651c6b33754b3 \ + --hash=sha256:d028afc4fbbd6796b2604195ffdb1021ef77b18cf01356f810820a52a7e2a12d +azure-mgmt-core==1.4.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:81071675f186a585555ef01816f2774d49c1c9024cb76e5720c3c0f6b337bb7d \ + --hash=sha256:d195208340094f98e5a6661b781cde6f6a051e79ce317caabd8ff97030a9b3ae +azure-mgmt-monitor==6.0.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:5ffbf500e499ab7912b1ba6d26cef26480d9ae411532019bb78d72562196e07b \ + --hash=sha256:fe4cf41e6680b74a228f81451dc5522656d599c6f343ecf702fc790fda9a357b +azure-mgmt-network==25.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:94191ce8ae243ab6e9c489f21330b3908937e296d443fea4e5100d57d52e14c8 \ + --hash=sha256:f939f75bf139e03d2c457a4f07a5ebadb5affdd70aa54be9a0af44b8e52132fc +azure-mgmt-resource==23.0.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:c2ba6cfd99df95f55f36eadc4245e3dc713257302a1fd0277756d94bd8cb28e0 \ + --hash=sha256:f185eec72bbc39f42bcb83ae6f1bad744f0e3f20a12d9b2b3e70d16c74ad9cc0 +azure-mgmt-storage==21.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:593f2544fc4f05750c4fe7ca4d83c32ea1e9d266e57899bbf79ce5940124e8cc \ + --hash=sha256:d6d3c0e917c988bc9ed0472477d3ef3f90886009eb1d97a711944f8375630162 +azure-storage-blob==12.18.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:e11935348981ffc005b848b55db25c04f2d1f90e1ee33000659906b763cf14c8 \ + --hash=sha256:ffd864bf9abf33dfc72c6ef37899a19bd9d585a946a2c61e288b4420c035df3a +bencode-py==4.0.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2a24ccda1725a51a650893d0b63260138359eaa299bb6e7a09961350a2a6e05c \ + --hash=sha256:99c06a55764e85ffe81622fdf9ee78bd737bad3ea61d119784a54bb28860d962 +billiard==4.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0f50d6be051c6b2b75bfbc8bfd85af195c5739c281d3f5b86a5640c65563614a \ + --hash=sha256:1ad2eeae8e28053d729ba3373d34d9d6e210f6e4d8bf0a9c64f92bd053f1edf5 +boto3==1.28.61 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:7a539aaf00eb45aea1ae857ef5d05e67def24fc07af4cb36c202fa45f8f30590 \ + --hash=sha256:ec49986e6c9549177e351494de64886c3f9daffd1a7af9e40302208aa1ffff1c +botocore==1.31.61 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:39b059603f0e92a26599eecc7fe9b141f13eb412c964786ca3a7df5375928c87 \ + --hash=sha256:433bf93af09ad205d6db4c2ffc1f0e3193ddad4e0aced0a68ad8b0fa9de903e2 +bottle==0.12.25 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:d6f15f9d422670b7c073d63bd8d287b135388da187a0f3e3c19293626ce034ea \ + --hash=sha256:e1a9c94970ae6d710b3fb4526294dfeb86f2cb4a81eff3a4b98dc40fb0e5e021 +cachetools==4.2.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:89ea6f1b638d5a73a4f9226be57ac5e4f399d22770b92355f92dcb0f7f001693 \ + --hash=sha256:92971d3cb7d2a97efff7c7bb1657f21a8f5fb309a37530537c71b1774189f2d1 +celery==5.3.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1e6ed40af72695464ce98ca2c201ad0ef8fd192246f6c9eac8bba343b980ad34 \ + --hash=sha256:9023df6a8962da79eb30c0c84d5f4863d9793a466354cc931d7f72423996de28 +certifi==2023.7.22 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ + --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 +cffi==1.16.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \ + --hash=sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a \ + --hash=sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417 \ + --hash=sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab \ + --hash=sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520 \ + --hash=sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36 \ + --hash=sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743 \ + --hash=sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8 \ + --hash=sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed \ + --hash=sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684 \ + --hash=sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56 \ + --hash=sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324 \ + --hash=sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d \ + --hash=sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235 \ + --hash=sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e \ + --hash=sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088 \ + --hash=sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000 \ + --hash=sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7 \ + --hash=sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e \ + --hash=sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673 \ + --hash=sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c \ + --hash=sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe \ + --hash=sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2 \ + --hash=sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098 \ + --hash=sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8 \ + --hash=sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a \ + --hash=sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0 \ + --hash=sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b \ + --hash=sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896 \ + --hash=sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e \ + --hash=sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9 \ + --hash=sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2 \ + --hash=sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b \ + --hash=sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6 \ + --hash=sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404 \ + --hash=sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f \ + --hash=sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0 \ + --hash=sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4 \ + --hash=sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc \ + --hash=sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936 \ + --hash=sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba \ + --hash=sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872 \ + --hash=sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb \ + --hash=sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614 \ + --hash=sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1 \ + --hash=sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d \ + --hash=sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969 \ + --hash=sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b \ + --hash=sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4 \ + --hash=sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627 \ + --hash=sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956 \ + --hash=sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357 +charset-normalizer==3.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843 \ + --hash=sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786 \ + --hash=sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e \ + --hash=sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8 \ + --hash=sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4 \ + --hash=sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa \ + --hash=sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d \ + --hash=sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82 \ + --hash=sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7 \ + --hash=sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895 \ + --hash=sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d \ + --hash=sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a \ + --hash=sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382 \ + --hash=sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678 \ + --hash=sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b \ + --hash=sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e \ + --hash=sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741 \ + --hash=sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4 \ + --hash=sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596 \ + --hash=sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9 \ + --hash=sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69 \ + --hash=sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c \ + --hash=sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77 \ + --hash=sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13 \ + --hash=sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459 \ + --hash=sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e \ + --hash=sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7 \ + --hash=sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908 \ + --hash=sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a \ + --hash=sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f \ + --hash=sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8 \ + --hash=sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482 \ + --hash=sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d \ + --hash=sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d \ + --hash=sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545 \ + --hash=sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34 \ + --hash=sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86 \ + --hash=sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6 \ + --hash=sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe \ + --hash=sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e \ + --hash=sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc \ + --hash=sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7 \ + --hash=sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd \ + --hash=sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c \ + --hash=sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557 \ + --hash=sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a \ + --hash=sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89 \ + --hash=sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078 \ + --hash=sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e \ + --hash=sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4 \ + --hash=sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403 \ + --hash=sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0 \ + --hash=sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89 \ + --hash=sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115 \ + --hash=sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9 \ + --hash=sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05 \ + --hash=sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a \ + --hash=sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec \ + --hash=sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56 \ + --hash=sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38 \ + --hash=sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479 \ + --hash=sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c \ + --hash=sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e \ + --hash=sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd \ + --hash=sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186 \ + --hash=sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455 \ + --hash=sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c \ + --hash=sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65 \ + --hash=sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78 \ + --hash=sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287 \ + --hash=sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df \ + --hash=sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43 \ + --hash=sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1 \ + --hash=sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7 \ + --hash=sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989 \ + --hash=sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a \ + --hash=sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63 \ + --hash=sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884 \ + --hash=sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649 \ + --hash=sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810 \ + --hash=sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828 \ + --hash=sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4 \ + --hash=sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2 \ + --hash=sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd \ + --hash=sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5 \ + --hash=sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe \ + --hash=sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293 \ + --hash=sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e \ + --hash=sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e \ + --hash=sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8 +click-didyoumean==0.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:a0713dc7a1de3f06bc0df5a9567ad19ead2d3d5689b434768a6145bff77c0667 \ + --hash=sha256:f184f0d851d96b6d29297354ed981b7dd71df7ff500d82fa6d11f0856bee8035 +click-plugins==1.1.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b \ + --hash=sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8 +click-repl==0.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:17849c23dba3d667247dc4defe1757fff98694e90fe37474f3feebb69ced26a9 \ + --hash=sha256:fb7e06deb8da8de86180a33a9da97ac316751c094c6899382da7feeeeb51b812 +click==8.1.7 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ + --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de +colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0" and (platform_system == "Windows" or sys_platform == "win32") \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 +cryptography==41.0.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67 \ + --hash=sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311 \ + --hash=sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8 \ + --hash=sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13 \ + --hash=sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143 \ + --hash=sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f \ + --hash=sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829 \ + --hash=sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd \ + --hash=sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397 \ + --hash=sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac \ + --hash=sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d \ + --hash=sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a \ + --hash=sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839 \ + --hash=sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e \ + --hash=sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6 \ + --hash=sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9 \ + --hash=sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860 \ + --hash=sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca \ + --hash=sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91 \ + --hash=sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d \ + --hash=sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714 \ + --hash=sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb \ + --hash=sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f +defusedxml==0.7.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ + --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 +dfdatetime==20230506 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:91441058c089de8822cf01d0a93acd5112a2d08ad7861ed3fe4cff1cd185ab79 \ + --hash=sha256:ed8209d9555e055403dc9f938bbe2dbc804f269e3261d9d36dc683c24aaba146 +dfdewey==20220603 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:f515275563ddb63a2d478736f1e82f0bc09d86efe267ee8ed0bb958643bd75fe \ + --hash=sha256:fd6036964c742f10c71617d9beb7545dd360c321ebc86e8d25aef14504bb194d +dfimagetools==20230806 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:d6cc0c8f4788f9a33ecde160b372161834ee20e73d3ef99ae382c8b608dc44e2 +dfvfs==20230531 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4d1c89321689e2848b2cf0166d3771daeb7d70fc0b177c9d452887562deaa88e \ + --hash=sha256:f2c71d781c0fe03b348ee93cc1f0c7da6c82e0038adb94b3c055b4ea647c428f +dfwinreg==20221218 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:a98e3dc115c6b8af3a944d76a49cf5ec0c5b2a0fa8003dac5d7cbc78b4b72d2d +dnspython==2.4.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8 \ + --hash=sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984 +docker==6.1.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20 \ + --hash=sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9 +dtfabric==20230520 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:ac93c111efde010ece3cf6477856e89a46fc71add64e178386cfe273a1a88553 +ecdsa==0.18.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49 \ + --hash=sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd +email-validator==2.0.0.post2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1ff6e86044200c56ae23595695c54e9614f4a9551e0e393614f764860b3d7900 \ + --hash=sha256:2466ba57cda361fb7309fd3d5a225723c788ca4bbad32a0ebd5373b99730285c +exceptiongroup==1.1.3 ; python_version >= "3.10" and python_version < "3.11" \ + --hash=sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9 \ + --hash=sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3 +fastapi[all]==0.98.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0d3c18886f652038262b5898fec6b09f4ca92ee23e9d9b1d1d24e429f84bf27b \ + --hash=sha256:f4165fb1fe3610c52cb1b8282c1480de9c34bc270f56a965aa93a884c350d605 +filelock==3.12.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4 \ + --hash=sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd +flor==1.1.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1fac101e161446dbb2ee5379d5b950bb015fe6d90568385a549b538ca12fe942 \ + --hash=sha256:b332f6f78c9c99833c2d35012cee1cdb8ebb309fdc71d20fbc9f692479083f78 +future==0.18.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307 +google-api-core==1.34.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:6fb380f49d19ee1d09a9722d0379042b7edb06c0112e4796c7a395078a043e71 \ + --hash=sha256:7421474c39d396a74dfa317dddbc69188f2336835f526087c7648f91105e32ff +google-api-python-client==2.102.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:906ff9b672a4d5ddad8f4073a040e59f1fba6734909c14cd49938e37be53691d \ + --hash=sha256:ce2fb4d80eb24519ced44a1e79030866cc8a6379ed5ba6c76ba46e772cc68137 +google-auth-httplib2==0.1.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:42c50900b8e4dcdf8222364d1f0efe32b8421fb6ed72f2613f12f75cc933478c \ + --hash=sha256:c64bc555fdc6dd788ea62ecf7bccffcf497bf77244887a3f3d7a5a02f8e3fc29 +google-auth==1.35.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:997516b42ecb5b63e8d80f5632c1a61dddf41d2a4c2748057837e06e00014258 \ + --hash=sha256:b7033be9028c188ee30200b204ea00ed82ea1162e8ac1df4aa6ded19a191d88e +googleapis-common-protos==1.60.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:69f9bbcc6acde92cab2db95ce30a70bd2b81d20b12eff3f1aabaffcbe8a93918 \ + --hash=sha256:e73ebb404098db405ba95d1e1ae0aa91c3e15a71da031a2eeb6b2e23e7bc3708 +h11==0.14.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ + --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 +httpcore==0.18.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:13b5e5cd1dca1a6636a6aaea212b19f4f85cd88c366a2b82304181b769aab3c9 \ + --hash=sha256:adc5398ee0a476567bf87467063ee63584a8bce86078bf748e48754f60202ced +httplib2==0.22.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc \ + --hash=sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81 +httptools==0.6.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:03bfd2ae8a2d532952ac54445a2fb2504c804135ed28b53fefaf03d3a93eb1fd \ + --hash=sha256:0781fedc610293a2716bc7fa142d4c85e6776bc59d617a807ff91246a95dea35 \ + --hash=sha256:0d0b0571806a5168013b8c3d180d9f9d6997365a4212cb18ea20df18b938aa0b \ + --hash=sha256:0fb4a608c631f7dcbdf986f40af7a030521a10ba6bc3d36b28c1dc9e9035a3c0 \ + --hash=sha256:22c01fcd53648162730a71c42842f73b50f989daae36534c818b3f5050b54589 \ + --hash=sha256:23b09537086a5a611fad5696fc8963d67c7e7f98cb329d38ee114d588b0b74cd \ + --hash=sha256:259920bbae18740a40236807915def554132ad70af5067e562f4660b62c59b90 \ + --hash=sha256:26326e0a8fe56829f3af483200d914a7cd16d8d398d14e36888b56de30bec81a \ + --hash=sha256:274bf20eeb41b0956e34f6a81f84d26ed57c84dd9253f13dcb7174b27ccd8aaf \ + --hash=sha256:33eb1d4e609c835966e969a31b1dedf5ba16b38cab356c2ce4f3e33ffa94cad3 \ + --hash=sha256:35a541579bed0270d1ac10245a3e71e5beeb1903b5fbbc8d8b4d4e728d48ff1d \ + --hash=sha256:38f3cafedd6aa20ae05f81f2e616ea6f92116c8a0f8dcb79dc798df3356836e2 \ + --hash=sha256:3f96d2a351b5625a9fd9133c95744e8ca06f7a4f8f0b8231e4bbaae2c485046a \ + --hash=sha256:463c3bc5ef64b9cf091be9ac0e0556199503f6e80456b790a917774a616aff6e \ + --hash=sha256:47043a6e0ea753f006a9d0dd076a8f8c99bc0ecae86a0888448eb3076c43d717 \ + --hash=sha256:4e748fc0d5c4a629988ef50ac1aef99dfb5e8996583a73a717fc2cac4ab89932 \ + --hash=sha256:5dcc14c090ab57b35908d4a4585ec5c0715439df07be2913405991dbb37e049d \ + --hash=sha256:65d802e7b2538a9756df5acc062300c160907b02e15ed15ba035b02bce43e89c \ + --hash=sha256:6bdc6675ec6cb79d27e0575750ac6e2b47032742e24eed011b8db73f2da9ed40 \ + --hash=sha256:6e22896b42b95b3237eccc42278cd72c0df6f23247d886b7ded3163452481e38 \ + --hash=sha256:721e503245d591527cddd0f6fd771d156c509e831caa7a57929b55ac91ee2b51 \ + --hash=sha256:72205730bf1be875003692ca54a4a7c35fac77b4746008966061d9d41a61b0f5 \ + --hash=sha256:72ec7c70bd9f95ef1083d14a755f321d181f046ca685b6358676737a5fecd26a \ + --hash=sha256:73e9d66a5a28b2d5d9fbd9e197a31edd02be310186db423b28e6052472dc8201 \ + --hash=sha256:818325afee467d483bfab1647a72054246d29f9053fd17cc4b86cda09cc60339 \ + --hash=sha256:82c723ed5982f8ead00f8e7605c53e55ffe47c47465d878305ebe0082b6a1755 \ + --hash=sha256:82f228b88b0e8c6099a9c4757ce9fdbb8b45548074f8d0b1f0fc071e35655d1c \ + --hash=sha256:93f89975465133619aea8b1952bc6fa0e6bad22a447c6d982fc338fbb4c89649 \ + --hash=sha256:9fc6e409ad38cbd68b177cd5158fc4042c796b82ca88d99ec78f07bed6c6b796 \ + --hash=sha256:b0a816bb425c116a160fbc6f34cece097fd22ece15059d68932af686520966bd \ + --hash=sha256:b703d15dbe082cc23266bf5d9448e764c7cb3fcfe7cb358d79d3fd8248673ef9 \ + --hash=sha256:cf8169e839a0d740f3d3c9c4fa630ac1a5aaf81641a34575ca6773ed7ce041a1 \ + --hash=sha256:dea66d94e5a3f68c5e9d86e0894653b87d952e624845e0b0e3ad1c733c6cc75d \ + --hash=sha256:e41ccac9e77cd045f3e4ee0fc62cbf3d54d7d4b375431eb855561f26ee7a9ec4 \ + --hash=sha256:f959e4770b3fc8ee4dbc3578fd910fab9003e093f20ac8c621452c4d62e517cb +httpx==0.25.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:181ea7f8ba3a82578be86ef4171554dd45fec26a02556a744db029a0a27b7100 \ + --hash=sha256:47ecda285389cb32bb2691cc6e069e3ab0205956f681c5b2ad2325719751d875 +idna==3.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 +importlib-metadata==6.8.0 ; python_version >= "3.10" and python_version < "3.12" \ + --hash=sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb \ + --hash=sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743 +isodate==0.6.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96 \ + --hash=sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9 +itsdangerous==2.1.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44 \ + --hash=sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a +jaraco-classes==3.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:10afa92b6743f25c0cf5f37c6bb6e18e2c5bb84a16527ccfc0040ea377e7aaeb \ + --hash=sha256:c063dd08e89217cee02c8d5e5ec560f2c8ce6cdc2fcdc2e68f7b2e5547ed3621 +jeepney==0.8.0 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "linux" \ + --hash=sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806 \ + --hash=sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755 +jinja2==3.1.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ + --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 +jmespath==1.0.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980 \ + --hash=sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe +keyring==24.2.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4901caaf597bfd3bbd78c9a0c7c4c29fcd8310dab2cffefe749e916b6527acd6 \ + --hash=sha256:ca0746a19ec421219f4d713f848fa297a661a8a8c1504867e55bfb5e09091509 +kombu==5.3.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0ba213f630a2cb2772728aef56ac6883dc3a2f13435e10048f6e97d48506dbbd \ + --hash=sha256:b753c9cfc9b1e976e637a7cbc1a65d446a22e45546cd996ea28f932082b7dc9e +kubernetes==28.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:10f56f8160dcb73647f15fafda268e7f60cf7dbc9f8e46d52fcd46d3beb0c18d \ + --hash=sha256:1468069a573430fb1cb5ad22876868f57977930f80a6749405da31cd6086a7e9 +libbde-python==20221031 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0497a6c77f18f8d14bbd1a54ebd051122599fdb56fad83586b4fbeb0af6f1ec0 \ + --hash=sha256:0aa359362986805998caa06b95bf9d8f5818734b2de3014a5eb49f1b5976ed88 \ + --hash=sha256:8ff19fd92258909a0ffe46680231c02f8fa57b5b0704d4a52482c606f136bc39 \ + --hash=sha256:aa422589bcc160816cdfa82d987385103f31eb029c40bff5cb43477334acdf19 \ + --hash=sha256:b86a5f2f1ac1d6985f9cd6f88b1ce98ee4e531ef045a604e4eb78540621eb846 \ + --hash=sha256:eb69fd1206dda243269a1dca42714975564b55a458736011c93c11275d233b30 +libcaes-python==20230406 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1aeded8ffc3920baf8e4f490c4ac8a3b2a09aafcc116e5b1baea32e45459d6e7 \ + --hash=sha256:4c7c7ef0e3370f60dfa28c4684c269752bce05b5afcb730c93de29b6b8bdeb2c \ + --hash=sha256:5b3f47ffca3682d2e078ad63be90555a653659da39232d2c914a2726135cbc21 \ + --hash=sha256:95da6adaef80aba6ac0ac8db5011f0ff1f86dc76d009dfe259a2dfed63811f4b \ + --hash=sha256:ae8563024aa89c3ac3c02f33a7bd8876b6504aa943fc31c8ff66fa291e028d88 \ + --hash=sha256:c7274a61beee066f079c7dbec9df92a3483ebeccd27e84cdb6f2cdb6928e00da \ + --hash=sha256:cfd75c493417df570f1cc6da1fc00fd4dc82bdc359b1c82abbb488d3bff8b3e6 \ + --hash=sha256:d16384b3e804fbfe50e8fab4e246480b8bc39857f244c8e908fe923df715f7c5 +libcloudforensics==20230601 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2a6dc01767ce52d341f41759b4d3455d8741bca5afa2535e7a10c561a167a23c \ + --hash=sha256:66bbac27fed58255f3b593695db2b140769c2e2845c359b1d7c02f8fd82be475 +libcreg-python==20230930 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:266a14777c99d7bc623ea501b00f84c132fde9641d054f4a51542b7446b62ea9 \ + --hash=sha256:2b78f1a5ad6529fef57391d0bc8a39aa57bfdcfb859d4fa0792b24038376a0bc \ + --hash=sha256:3d80b6f2e3463906f4f3ce01a154865efdd162719be8710ababb55eb743f0972 \ + --hash=sha256:467739605bac96bf42a14155d0686068aa5d9da81ad016c7a155e7d76374deff \ + --hash=sha256:aa04b1869c73a5038542f973c0b71d3ae0d75123005d354a775a539f4d4b0042 +libesedb-python==20230318 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:263c1c3b7538d354bc1f9bb64f2c4f1b9c522144ad3d9f82eb18f0ea6dc86e84 \ + --hash=sha256:367f0db55651a9c795535a86eb1090932c47c93280a9253c73de75b29b0be57d \ + --hash=sha256:398f68b388e5d0c818f7891a37e2e2da0fc20e168f762246cbaaed6bb04d0763 \ + --hash=sha256:8627f679194e707bc14ffc1a86a6538cc1f42e69a2baeed2210533f11cba39dd \ + --hash=sha256:9b8579c16019100f5f138218725029ee04cc444bdc7bdfd1e73737f139a64798 \ + --hash=sha256:a37c3a2448381fd42798efe8052b93788e967a4157e7f22b1734f2cc2a2efae7 \ + --hash=sha256:b049803ba168310e8a9a532359436caf7178df47d6aa985d1ef27f0df4974c18 \ + --hash=sha256:db9a2f95a97ced0ca3790b7d626d009c4434ddb31f238d6c45755b7a0ea9e5e9 +libevt-python==20221022 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0bfc4f7ff1b7abd5d0239eff2464e5c1f6ef9ec782a5a609ee39852bcdf7c0da \ + --hash=sha256:14c321f9643377de1754814a96c191e00d7a91b8c017e81e516b81444a6e6ae9 \ + --hash=sha256:3baf1fe9340626b4d56f8a936f0ee1e5f66839caac17e5b5c6902069382b49ed \ + --hash=sha256:8de4ea472f826a301d2e9699b9f086814e8cc922c29abac3803fdcc7b4c247ce \ + --hash=sha256:9b33e9da215cf1eeb4578a0469c6a2f55d07ff19cdce8a8c8064ed03d464bf27 \ + --hash=sha256:b96b046671f2e2522bfddcab7d781786ecfa68e284a2ec834b238dd5d7537f48 +libevtx-python==20221101 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1f3ebebd677e800997007cb32d1cd26731ddd979f417d502d65e92a03b610171 \ + --hash=sha256:5d84f3fcff00ebab15c48e3cea0b6a2347ef8f583230d2f39c44ce5aa55fc7b3 \ + --hash=sha256:7552d3e5ce827b26e877c7591d2e4a6236b2e46a9ed65026e01ff16ced438743 \ + --hash=sha256:ad5dc573b61315c4592dcc588b0587955290c79f77a869529bb06110a41a7709 \ + --hash=sha256:cfcb380f5d4eca9aee33a7460977b18453376860274e0669809f78a4019cbecd \ + --hash=sha256:d8004ea30ec3abd5b6312e09db6d4e43a397d54a9067dadeb1e669bbbfea0d37 +libewf-python==20230212 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1248b1ddfb85c111d605de2eee8d69082bb6bbce579a0cdae9b3479e0315cdbc \ + --hash=sha256:6bb6cf255a2f3ee9065ab395d6978cdf5e30f5a941dca93e3b0d563250f9f8b0 \ + --hash=sha256:8dfb496bea6443bb9164b3ca2ade601b7e28a455cc7e3a7296d4bd3451c91313 \ + --hash=sha256:95fbf898efd292ee75df10360ba6c4d1cad174baab53130622d97d81ee01c3a6 \ + --hash=sha256:97b81cd93acc61fba2aab8f2e4027b201db23e1526f6b1130a74993c698741bf \ + --hash=sha256:9f54cd377073c647bbebaa456e92daa9a48a4bad9165b3b9838601265694836c \ + --hash=sha256:b66a61740efc1dd272dfb0c12f9afbd34ac095db616623c76c630783d945c3bc \ + --hash=sha256:d510e22cf9c6845358994f9a5d32e9f55badbed4e9aa232f0ad9ffab2237c463 +libfsapfs-python==20230617 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:20cf8a3f59ffe85c5ec54358be0a166c06b263b84ba31967f3dd0cdc01e9e3c1 \ + --hash=sha256:40f5d956c4855e0ce36735ddc76dc9f1448ae26b16d23322820a9fc3e99d3b57 \ + --hash=sha256:4983b339a1a09b4198b552cae8dfe83fee8467e6685bc46cbb7034008da7068e \ + --hash=sha256:66b935a389ce5e77a78731d167fd76e1bf75d229d9ac5e9f8dc86e65f88aa76e \ + --hash=sha256:bc3b3bec572011beb22489103942d194f6e02fd844b00044dfdd87437df8d4ff \ + --hash=sha256:cad586a28fce437f8eec3b7acceda7a71e06853e97b9c2c6126ce0e450b733ff \ + --hash=sha256:cc23857976ee45078e28b15fdfb057a5348e21787e5f209dba3c449f08b4882d \ + --hash=sha256:f228c193c00d2dadabf2143beea3fb8d67927d6ff371413926ce8f7bb4b1270a +libfsext-python==20230603 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:146f4a71a65c6b4c91b28a3c9edd7fdb70033698068b9566306d0ed1f7ed00a2 \ + --hash=sha256:3249808b150704798f46a4e7bf1f3f9ac248ab5237af421e6431af52b4e61188 \ + --hash=sha256:3c3dd65bcb3f45e7236d306be9170f25515c7cb9e5f0636337cad8c218e10fe9 \ + --hash=sha256:4ee99679eb480049aa26083ad58be9c604817f6afcff9a5a5cb1ca2a7b8968e7 \ + --hash=sha256:84b4a284fa72de522be87a7cbca584e1081b3a7268569b3723db427fb18b915a \ + --hash=sha256:a1d0ea6d37c80306a5020b414ff3e9d879335c32070d71a77b08e4271a48a2c4 \ + --hash=sha256:c61900f27020215101a38397ddc1c877c72f8f001bec5a140ef158ad787111ad \ + --hash=sha256:f941b976aabc901884a91f0451725231d123ae88e310059dda513c4a7470a7df +libfsfat-python==20220925 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:5c6c69cb43040f12e0ada700b318f276356a34903d475053b7d03ef91c09c6ef \ + --hash=sha256:625200cd5cc031653ccf5280d094a0fe003999a7af1df57db6e7a9efca51ed4f \ + --hash=sha256:76fd6919b34eef7c68817ae6a27d6cc268cdbb920210828ac7f0f7b9674d369e \ + --hash=sha256:85b856dac05271319378a01f0859913d74797e81425ec49792346696296078a0 \ + --hash=sha256:a314e907f19d4221db900270f4ee90b92fa994b47620610d2080eed1f79de741 \ + --hash=sha256:b8ae24636533dd3e82844e3f0a1aaf685be292b0299177338e1386125decee54 +libfshfs-python==20220831 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:17a27618677c190a5313ee0b14bd69dfe2581817babe1339f3f21fe01446f4f4 \ + --hash=sha256:67169fdee829bc52c31819ddbd49c653ec9bfa031a762a5ef67d7f237325a5a6 \ + --hash=sha256:67c6370a1611cf626221a0bd5b70735a6084ce1954b4708e759919879672dda7 \ + --hash=sha256:bca65aa50cffc4afd8aef678fab30274877c8ffe848e206733800cc03d44d74f \ + --hash=sha256:c3d55c20225afdc66b7c0c1a6432784bc3b366c94d8b55217cf7bc9fe595cd18 \ + --hash=sha256:d2649dde55a29164e8bd5ad97b2bd86f92f6429914b568473689b3f5bf06e95f +libfsntfs-python==20230606 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:373f0065888ef9db047d12ecc016b20bf077d0a0bfa9cd6306b564b5071ac370 \ + --hash=sha256:38dc1e5beb31146ca8fc70003bfc9cc15d98c5405a5d5339767bab8a18049e08 \ + --hash=sha256:5037a66e562ed03ff57b36dcd8666b555dda4dca1e2045d7f5654764182477a0 \ + --hash=sha256:6998aa3f09ebdfb6434c035987531edccfb9e3ca35c367b488ccd4e96331fd2e \ + --hash=sha256:c70df92a678553c52ad98c140fb3f6f6aa335a5103489fbc1dccef577475f7d7 \ + --hash=sha256:cc4a946073920e7d26d8f299d1b4a7b7ea0ab635bccad3ef5269f2976968c185 \ + --hash=sha256:d16fb849d3f92840b78b13328484096cccb6a587681353b81b1f2b1c79f452a3 \ + --hash=sha256:f0df820bd6d91103a36664f228fcc8564715bd9c4f446149d90a1e751bfabdff +libfsxfs-python==20220829 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:35bfe1f3e34816b045a892718fb0101fb9596ac9bb83cd3b1a1f4dbbfb76d234 \ + --hash=sha256:44f086b56fd2ced20894e25baccede09f4af7396d0628c5b470e19ce5c203b4e \ + --hash=sha256:46f8682ced362a73b6e190a834bbd82c834acd40210e307da352709773824b1e \ + --hash=sha256:47eb444e9fcc32b15160fba1597f50c8ffe420e34772f72f96305fd85ca568ac \ + --hash=sha256:98dbd22cefc1ebdcd020b11c5534db2f761724924e9b4a3be121b61d9d3e5343 \ + --hash=sha256:b060b5148a37b69adf8de0089435d09894192440d2524799d69206ee16b24b80 +libfvde-python==20220915 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:062778108dca75fb942ee46cc41770fbde757ebe72e57258d6d75e0e193f7ef8 \ + --hash=sha256:369c1b7299cc1adbdea53f6f522ab21e157b5fea5ffe0feedec21c7a5e0355b8 \ + --hash=sha256:57bb643f9d3222b5f77b1f807135ee331c36166029ebd844d84938966b7198ff \ + --hash=sha256:9fdf019ce73494aa14609f348f874faa9440f4c2ef8625cdc3835b795cbf5029 \ + --hash=sha256:b449a64af72c7bbfe8c4e6e28091dc4e5d345930e1e684235fda926e4a260333 \ + --hash=sha256:fbfa17477ff13c032e8c7e8dca960b182e2a8d4baad40a13c9a864745fd2fb1b +libfwnt-python==20220922 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:213620e071ed6fbb2555043be002b103b36b0cb28ca04956f09195451d8f76a3 \ + --hash=sha256:22772b4e5c59efb88801df35b7e69b85c73410a741449d5af252d497e22e1264 \ + --hash=sha256:48250ae5c36930d754023d4f49786a8609c057c5567c37f8bd81e26ac9a65da1 \ + --hash=sha256:631f0e347987ebf8cc280e2fb06793c9839dd38bad29eca637798d8873f4fbe4 \ + --hash=sha256:67929de58db49205018864417aa168616a2d20aa71fd20ad41cc92b6cf29899e \ + --hash=sha256:a236011bef5e2534d23da1312499467418bb6d74c9ad22a192453e22118950f0 +libfwsi-python==20230710 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:5f0bf8eb2ab8161cb8692c9db301728b8cdde19e7fea2e4037130272b5d74f04 \ + --hash=sha256:64ebb0138472cfa13be7b0239802d564862f6604e39202f97b84c1394d687cde \ + --hash=sha256:8adc58de91123833814d67bffcdf69d849d8cecc46358092d57619d152e41e46 \ + --hash=sha256:a1256a86adc7509e263490c8c64fc5be00eb89758e940b31b97e1b9faba9213e \ + --hash=sha256:b778c0c187cdc36dd1342b444f1f93545059bd060caa27f0e6a665fbccfc8081 \ + --hash=sha256:b837e15933a492d439e01f484341c1575e1ab03ae3487f4df514a969b4d65ff5 \ + --hash=sha256:f9fa55e9998356df61793259fdfdfaf55307fd2932c7c1d435576acb78eccc59 +liblnk-python==20230928 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:51dec5228e229c2405150373ce746056a77c718d2b86b0b1b4c2c163104e535e \ + --hash=sha256:6459c4da330d02d3ca29319836bf7a17fc43d293b79859e900023b6f65316b21 \ + --hash=sha256:a6412f6903701411f45253a4d70a9049d43952a75be8b4941eb54364e90661f3 \ + --hash=sha256:c454325f504a04f165bef698ca2db24f788857f581602f526a06dd9ff51732fc \ + --hash=sha256:dea452f539be422849f4882bf2340ef203e49afaeb7d1fe9773eb15324aaa90a +libluksde-python==20221103 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4555ff85de2b16220ed0d574882fd007f752829ee4b51071a71d5c884ef72724 \ + --hash=sha256:7634bd3695172db0282312b33fdd34470aed7056bc79ac21accad7e9b930c219 \ + --hash=sha256:80fa660a5ba7c8add013cf3d2b7d132bf817dae19b547437b23496abaec1e5f6 \ + --hash=sha256:8def6d57af58aea07e1059c47a4096f2d53d7e5619424f42f588e9668c5a573a \ + --hash=sha256:a7e6fccd02a44bc69d08491a7080219cc32b87ea4521d7432d085ff151500ced \ + --hash=sha256:e342cc7d4e77d408c36c0ef584d81a9467976d1762ecc9295d820acdef2ab2c3 +libmodi-python==20221023 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0a19ae7b66d752eaf577042640f690292498c87761b51e217ee40efc2a24ae29 \ + --hash=sha256:465aa3f9ff0d8a32a2df45ffaf7ffac1cc98977d35087f759e30bceaf17eddca \ + --hash=sha256:56ffaf9aaa43e2dd8342435d74849b68b8f676c06b069f5697fb3871b4f1c909 \ + --hash=sha256:5c9c0ec708e568aece905793a698b869eac71feed1d7b698b692d89670a0e3ec \ + --hash=sha256:98ee877eede96cc04afc063866715aa37989974a4156006b0dd02443cdf437ac \ + --hash=sha256:bef906efacdc95b6ec345c32b9cd17202ad451dafe0206ea523f669d1b42f1a0 +libmsiecf-python==20221024 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:46110afd8d275a93ff89a42610a5776e06d5dda7ae601444681542ea22eddd6d \ + --hash=sha256:93e8859dc3552744a32af09413d4d0231c77bb8cea982238347d45c655c970ad \ + --hash=sha256:b02355193d1851575d8d227e7e615a0138e5759f8ebb3c1ff12d5c105459c0b9 \ + --hash=sha256:c691b4480e6d145cb26eb62f4ec989bcb5210b4f75d78b4aa21ccdb7027157c4 \ + --hash=sha256:f0287b9959205051055aab8eabfa1a98e4c577adffbd0d503aec537554a888b8 \ + --hash=sha256:f717312a54574d73a8f14645c3382cd41ce6796586c10bcfe7dc84b43b5cbe4e +libolecf-python==20221024 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:17e6a4d20fd61d90255ea51f5656599762ae67317cf989a4bbe0262279170053 \ + --hash=sha256:475b2855236c3e8c104bd83971dc996b10f16ae3a9ff1148d0ba736fc53cffa4 \ + --hash=sha256:5ad8f97f9351c73738c78f4687a82a209e1466f7043ee1a9e8d880aabcb6dea4 \ + --hash=sha256:60fa735c8cb10d00c013a4bcbaa973b93f439aed62e1f5a058a934ec7114a894 \ + --hash=sha256:d18154fe71511fdf6ec92002fa246571b55ddbae2818ac2c4ab1a13c16fa3169 \ + --hash=sha256:ed7d88741cd7ed29044ee34eb8bed09897bbfaf46313c6bbf9e20925785c87f7 +libphdi-python==20221025 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:e4588b2ef1afe38ef40dd70a6d62c45a9c407e7dda1f006666e53df2602f886a \ + --hash=sha256:fe08e3b1737fa3170eda03e99da094ba68687490b5f87177e17d0521e8c21a28 +libqcow-python==20221124 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:38f4387f641a995ad80cda1f1c113d7cfabc7d965e0e7b052434c6684686de73 \ + --hash=sha256:61a6adbcb2d0aa2422e693621146beeec5068eb722e2d5d250136d4e304182e0 \ + --hash=sha256:819ecf7bc4f3ebe3ff99806f847dc213fb3ea2e00fbc4ad189e1acc536a9de6d \ + --hash=sha256:a7409d35c4f7b7629d893a75834d20c3db6cc66ba82972277f2401860fbae272 \ + --hash=sha256:de60bc7a9b3cdde61c7955137da3518680a00329772ffe5d49034b383dccc048 \ + --hash=sha256:ee4789a9e87a5477607ba040c052a0f35949a117a6c5b09ee73c0bedd60636b4 +libregf-python==20230319 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2a02a7c3609e2fb5b097ed9c3c4cefe4e1ad7c8ffcbd34bb9d9c649608f70598 \ + --hash=sha256:538594d8ed5e85b47e849b11b64c747d34fa4db16086e568ec87ece82fe10084 \ + --hash=sha256:82992eff98ade8f8bbb88e9c41f7b5d566cc5acce3381bf36bb62f82b787889b \ + --hash=sha256:83e18b9fe5cc111dc6fd2379c19c5cef5e10f871c9a8d100cb82391f934b6972 \ + --hash=sha256:9ed2c5e0c6947175c12af021b566fe8e6dfa35c1f4d197aee280c271d4ce8327 \ + --hash=sha256:a1ccab73bd3ef4dbad810ff00bd9fdac22cbce7eb64bd4b5a29f20605a816597 \ + --hash=sha256:c5890b91c0ace5fc945a8f6eec7eae3fcb35e8de4aae83f357e9b466e8117404 \ + --hash=sha256:e2e6744751e327e69a5004386eac658ccfc7ea29b35322155d921d359e5dad61 +libscca-python==20230716 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:3b2d3a212a24908284a7f1e0178b2ab9a500a5a8682bb76fa65633fd6d637ed2 \ + --hash=sha256:5a465dcc3ce0a763f3646ffdbe660e1f4c19a3bd43520f07f010f7bc250354b4 \ + --hash=sha256:5f34fa592d70be620935d7cd23df1d55d0787a5e567b7da3ba6ec4922aca906a \ + --hash=sha256:846b78ae5d8746e5314526d903430f56ce854efed94956f0e18f5ff7708f55a4 \ + --hash=sha256:98eaa4e69769ab00eef20e659e1b75faf5365fac88b2829e72ad50827c57a44a \ + --hash=sha256:aca8b0f56aa6256f57366bcab27b693257e15f74a14e97c07a44f94f255a12af \ + --hash=sha256:c16a9afbe73837c71ff8b9bba514b6e48b9e6127e187bc9ef1861dc2d7d6ec46 +libsigscan-python==20230109 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:184e1e706c0b1922626161479b013866d76eca003124ec39939f8302cb5c8e49 \ + --hash=sha256:36cc442630e58387162cdc26b1d4e64b72ea36856fac3fd3b0196f10b48c667e \ + --hash=sha256:4fa0dad6f1b9825f8b19099fb803fbc239cca4108da3986403c6f3986bf1ff63 \ + --hash=sha256:566466d07dc3652a9b0aec0a2c6015bd50d568b009e8c6b26f08c678e88c193c \ + --hash=sha256:5f18592f6d38103b953be8847ae1542f46442778d112d0b8b9311ffd9d782f53 \ + --hash=sha256:72a0d7de6eac130cfab558106741a1ee16047dc6f97244ba1994eda7589b46c9 \ + --hash=sha256:a3ecd8190c0ebb64256df9979240c68bdcd8e00ee5d03d300ed8abf3bb54548a \ + --hash=sha256:d47d758dded12959a533d689132cec7a1fd407ab5fce04023101c7ad8d0e4a4d +libsmdev-python==20221028 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:09989b6e977bf64ecc115a07cd44258de2879b0d5acc45328202b44b4d82047d \ + --hash=sha256:6694f1cf71736725ce4093742680883db76557e5470a5f0652e9a506e010acf8 \ + --hash=sha256:a325b61ca5184c71826c095f69ca374c7c4301acd0f626f83a67b056b90ad13b \ + --hash=sha256:ed4606b30fee75e5dd428cd84a2a8f50f1321908583e80b7c9096b9a660951bd \ + --hash=sha256:f6b901b3cfaa52de5fd3ee220c98e23b590546d732d3d78fee53a1f4906945d2 \ + --hash=sha256:fb789a7f5060dc7fe994502f954293393339273b80f11a7d83bb7037c0ea3a1d +libsmraw-python==20230320 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:3c0435fe287c72bd3470463838cc116dbb8bf859a12f089d32736728698ba59a \ + --hash=sha256:451bc590755044123b410ab243d0de070790615610e4039cae308c458fa2f85a \ + --hash=sha256:5f84bea1fdd19a4fa4de87f0556cb23b06fa80e1be2d5ed7ea71f5bdff051c68 \ + --hash=sha256:6fa01fa1f2fa72cdc53f4d69c3c1ec07c5ecd08cc8bfcfd90148108bc689b082 \ + --hash=sha256:83174b2979da123464feaab5b114178dafac08886e42782a5f8bab569e10c85b \ + --hash=sha256:c25b4e36e969793051456275c2dff527ee51e7d0fce8043cd176262a7a075681 \ + --hash=sha256:f2ed5a4c4a60e443b1590a119f6180daf319e1904f7c24faecf5389fb2c7be09 \ + --hash=sha256:ffcb80bc9fa282da489ec884260a5cecfa420a0fb1b947e64b192cdda4016a1c +libvhdi-python==20221124 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1874bbc6be1267b86d6511fa8fc98c4730e6dfbe8cfa7f321390c1b45a0c9e6b \ + --hash=sha256:2310de5cf043f1ac628bfd8d179ba01bcf066f313ae06e7a5b504b2a08dd5903 \ + --hash=sha256:28edcf26b5f21f5287ded3adb0664f2681060ab77921c076117a413081d7315f \ + --hash=sha256:383fa8a6340f5b9e34497a23158e7afa5a5ff5150084e1f6e17f017e2fd973db \ + --hash=sha256:47646c5bb69fb8ee3592912663c9f77c24d586b2032ab63d8db2301a0dc222d4 \ + --hash=sha256:bfdeeaea9bdc6d6d4b0d075722f8883140e87866ee307e57d95b175cab2590ef +libvmdk-python==20221124 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:207e43b331692bda8123611f6e8bfbc2cbd6e52b37103c83611d9b117086a61c \ + --hash=sha256:7dbc88527e7eab7b40d2377cbac933d0aaaed5a9bc94ae887530d6a9093efd0b \ + --hash=sha256:81482880ffdc70f7cee5ab912847794390741ab44895e2edf81cb72d788e617a \ + --hash=sha256:b2cba366b0723087626d1397ec933c00bd3845ce9be9427b873384452a0b1905 \ + --hash=sha256:c48b0d02cd5d864cd7f212b5f868ac8464ff13fd23205b69eb1d070f57f6fd1b \ + --hash=sha256:f1679488d0fa20a8b878b26fe606a9e2e7328d6449b1e471d27ac32b16818406 +libvsapm-python==20230506 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:22b789dc02e481e6f209b21f6f320d223c590badc97ff9793aafd30b63468271 \ + --hash=sha256:5f74c7c975eededec8566997be85f569bc94a4adc8a4c9bdd8dd733cad6b2f9d \ + --hash=sha256:6f25babe37ae8aee1482a4ff249555ace2a240d9a167aa60d4e7e70a99d43963 \ + --hash=sha256:8a7dded77f7bad1ab67e6247ba26a9da2374305098aa76cf295534bf1d2086c7 \ + --hash=sha256:ce6fa2b28212355d588110166ae6a29a537459497a56ac76739a3a026170ab3d \ + --hash=sha256:ddc660d2dbc847f8ab4ea063cc3cc301f3eba46f52e1ed9d7f4291d34d0eeca8 \ + --hash=sha256:e58ffe72c28145e6a59dc4872e0ec743093b49c565102d1292a0823823c02f90 \ + --hash=sha256:f27f5495a705db1c9e776fdc945ec9936951bdd9839b0e0b97e5c8c2493d6f66 +libvsgpt-python==20221029 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:130bf9f87703f0ffa80d871b48a3024c7b2f69d78e98d607e46aa697997dfac9 \ + --hash=sha256:400d3af8629d4d9ae076300a2e9d96b3d34627357f44ba970352d74b02135b4d \ + --hash=sha256:9d6b0cedd4bfe9582cfb7e7c44bc617afbd0ea6a1af8ccdb8d9da02c6f09e253 \ + --hash=sha256:a162562375613b11c3949d4783ea4acfb8c7312f976da5ac8adfeda0f4cc7e2c \ + --hash=sha256:d868a93ef44c034be25902880429e9f8f88b2e9a3817439eb8d9b4ccc43f4925 \ + --hash=sha256:f754ea1dff14aad29d7ab9ba285e831f78404132e8a680cddd54e9f303bcf2d2 +libvshadow-python==20221030 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:39ac1f710dac7d5b56cdfc9ae0cf055f828a911189f6f97a77b9adf7149eba84 \ + --hash=sha256:53d7309bc3727bd7836fbec5901dfd5377c132a9f58c212aa5b8b37176422d08 \ + --hash=sha256:726741b76428b6bd9b70396d0a48dcdc27bc2cf89a30faa811de839fb33cfcac \ + --hash=sha256:84ea267e53cba6558e1ceb6f60bff179b5854715aa8baa31d0da1960c2f9c26a \ + --hash=sha256:b25afe1bf77c44d0a7fe86c7ad998b7c8d487115d45f95f5f6cb5623a4cc512e \ + --hash=sha256:f54a8efa35a38ec85119988c55b1137e6f04f71634bc821070c47aa87fb910da +libvslvm-python==20221025 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:214a92ce5b13a9972a6010578d8e0cc919ce2fafcab381600553777e2ef4b80f \ + --hash=sha256:3da04f79142cc8361177fc55756f2792330d35315144e019926994bd9b30271a \ + --hash=sha256:4864113099ac917ee23bafd76d68a4b2ad11e83030337c527c3600ae6c0a2c20 \ + --hash=sha256:677859372ebf0d41bcafe0b7d5bd8ce10574404eb8523f40ad27875e21bd18a3 \ + --hash=sha256:c36d0dd0f578cb874998787f692f324542a35941f3822b28bc8a0064710bcc51 \ + --hash=sha256:d7b9367c134269293dff9366954cbf999367ad83fa3e3da3abacd664edc62bc5 +lz4==4.3.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0ca83a623c449295bafad745dcd399cea4c55b16b13ed8cfea30963b004016c9 \ + --hash=sha256:0f5614d8229b33d4a97cb527db2a1ac81308c6e796e7bdb5d1309127289f69d5 \ + --hash=sha256:1c4c100d99eed7c08d4e8852dd11e7d1ec47a3340f49e3a96f8dfbba17ffb300 \ + --hash=sha256:1f25eb322eeb24068bb7647cae2b0732b71e5c639e4e4026db57618dcd8279f0 \ + --hash=sha256:200d05777d61ba1ff8d29cb51c534a162ea0b4fe6d3c28be3571a0a48ff36080 \ + --hash=sha256:31d72731c4ac6ebdce57cd9a5cabe0aecba229c4f31ba3e2c64ae52eee3fdb1c \ + --hash=sha256:3a85b430138882f82f354135b98c320dafb96fc8fe4656573d95ab05de9eb092 \ + --hash=sha256:4931ab28a0d1c133104613e74eec1b8bb1f52403faabe4f47f93008785c0b929 \ + --hash=sha256:4caedeb19e3ede6c7a178968b800f910db6503cb4cb1e9cc9221157572139b49 \ + --hash=sha256:65d5c93f8badacfa0456b660285e394e65023ef8071142e0dcbd4762166e1be0 \ + --hash=sha256:6b50f096a6a25f3b2edca05aa626ce39979d63c3b160687c8c6d50ac3943d0ba \ + --hash=sha256:7211dc8f636ca625abc3d4fb9ab74e5444b92df4f8d58ec83c8868a2b0ff643d \ + --hash=sha256:7a9eec24ec7d8c99aab54de91b4a5a149559ed5b3097cf30249b665689b3d402 \ + --hash=sha256:7c2df117def1589fba1327dceee51c5c2176a2b5a7040b45e84185ce0c08b6a3 \ + --hash=sha256:7e2dc1bd88b60fa09b9b37f08553f45dc2b770c52a5996ea52b2b40f25445676 \ + --hash=sha256:83903fe6db92db0be101acedc677aa41a490b561567fe1b3fe68695b2110326c \ + --hash=sha256:83acfacab3a1a7ab9694333bcb7950fbeb0be21660d236fd09c8337a50817897 \ + --hash=sha256:86480f14a188c37cb1416cdabacfb4e42f7a5eab20a737dac9c4b1c227f3b822 \ + --hash=sha256:867664d9ca9bdfce840ac96d46cd8838c9ae891e859eb98ce82fcdf0e103a947 \ + --hash=sha256:8df16c9a2377bdc01e01e6de5a6e4bbc66ddf007a6b045688e285d7d9d61d1c9 \ + --hash=sha256:8f00a9ba98f6364cadda366ae6469b7b3568c0cced27e16a47ddf6b774169270 \ + --hash=sha256:926b26db87ec8822cf1870efc3d04d06062730ec3279bbbd33ba47a6c0a5c673 \ + --hash=sha256:a6a46889325fd60b8a6b62ffc61588ec500a1883db32cddee9903edfba0b7584 \ + --hash=sha256:a98b61e504fb69f99117b188e60b71e3c94469295571492a6468c1acd63c37ba \ + --hash=sha256:ad38dc6a7eea6f6b8b642aaa0683253288b0460b70cab3216838747163fb774d \ + --hash=sha256:b10b77dc2e6b1daa2f11e241141ab8285c42b4ed13a8642495620416279cc5b2 \ + --hash=sha256:d5ea0e788dc7e2311989b78cae7accf75a580827b4d96bbaf06c7e5a03989bd5 \ + --hash=sha256:e05afefc4529e97c08e65ef92432e5f5225c0bb21ad89dee1e06a882f91d7f5e \ + --hash=sha256:e1431d84a9cfb23e6773e72078ce8e65cad6745816d4cbf9ae67da5ea419acda \ + --hash=sha256:ec6755cacf83f0c5588d28abb40a1ac1643f2ff2115481089264c7630236618a \ + --hash=sha256:edc2fb3463d5d9338ccf13eb512aab61937be50aa70734bcf873f2f493801d3b \ + --hash=sha256:edd8987d8415b5dad25e797043936d91535017237f72fa456601be1479386c92 \ + --hash=sha256:edda4fb109439b7f3f58ed6bede59694bc631c4b69c041112b1b7dc727fffb23 \ + --hash=sha256:f571eab7fec554d3b1db0d666bdc2ad85c81f4b8cb08906c4c59a8cad75e6e22 \ + --hash=sha256:f7c50542b4ddceb74ab4f8b3435327a0861f06257ca501d59067a6a482535a77 +markupsafe==2.1.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ + --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ + --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ + --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ + --hash=sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c \ + --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ + --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ + --hash=sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb \ + --hash=sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939 \ + --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ + --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ + --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ + --hash=sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9 \ + --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ + --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ + --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ + --hash=sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd \ + --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ + --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ + --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ + --hash=sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac \ + --hash=sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52 \ + --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ + --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ + --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ + --hash=sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007 \ + --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ + --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ + --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ + --hash=sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0 \ + --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ + --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ + --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ + --hash=sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1 \ + --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ + --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ + --hash=sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c \ + --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ + --hash=sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823 \ + --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ + --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ + --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ + --hash=sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad \ + --hash=sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee \ + --hash=sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc \ + --hash=sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 \ + --hash=sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48 \ + --hash=sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7 \ + --hash=sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e \ + --hash=sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b \ + --hash=sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa \ + --hash=sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5 \ + --hash=sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e \ + --hash=sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb \ + --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ + --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ + --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ + --hash=sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc \ + --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \ + --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11 +more-itertools==10.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:626c369fa0eb37bac0291bce8259b332fd59ac792fa5497b59837309cd5b114a \ + --hash=sha256:64e0735fcfdc6f3464ea133afe8ea4483b1c5fe3a3d69852e6503b43a0b222e6 +msal-extensions==1.0.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:91e3db9620b822d0ed2b4d1850056a0f133cba04455e62f11612e40f5502f2ee \ + --hash=sha256:c676aba56b0cce3783de1b5c5ecfe828db998167875126ca4b47dc6436451354 +msal==1.24.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:aa0972884b3c6fdec53d9a0bd15c12e5bd7b71ac1b66d746f54d128709f3f8f8 \ + --hash=sha256:ce4320688f95c301ee74a4d0e9dbcfe029a63663a8cc61756f40d0d0d36574ad +msrest==0.7.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:21120a810e1233e5e6cc7fe40b474eeb4ec6f757a15d7cf86702c369f9567c32 \ + --hash=sha256:6e7661f46f3afd88b75667b7187a92829924446c7ea1d169be8c4bb7eeb788b9 +msrestazure==0.6.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:3de50f56147ef529b31e099a982496690468ecef33f0544cb0fa0cfe1e1de5b9 \ + --hash=sha256:a06f0dabc9a6f5efe3b6add4bd8fb623aeadacf816b7a35b0f89107e0544d189 +netaddr==0.9.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:5148b1055679d2a1ec070c521b7db82137887fabd6d7e37f5199b44f775c3bb1 \ + --hash=sha256:7b46fa9b1a2d71fd5de9e4a3784ef339700a53a08c8040f08baf5f1194da0128 +numpy==1.26.0 ; python_version >= "3.10" and python_version <= "3.11" \ + --hash=sha256:020cdbee66ed46b671429c7265cf00d8ac91c046901c55684954c3958525dab2 \ + --hash=sha256:0621f7daf973d34d18b4e4bafb210bbaf1ef5e0100b5fa750bd9cde84c7ac292 \ + --hash=sha256:0792824ce2f7ea0c82ed2e4fecc29bb86bee0567a080dacaf2e0a01fe7654369 \ + --hash=sha256:09aaee96c2cbdea95de76ecb8a586cb687d281c881f5f17bfc0fb7f5890f6b91 \ + --hash=sha256:166b36197e9debc4e384e9c652ba60c0bacc216d0fc89e78f973a9760b503388 \ + --hash=sha256:186ba67fad3c60dbe8a3abff3b67a91351100f2661c8e2a80364ae6279720299 \ + --hash=sha256:306545e234503a24fe9ae95ebf84d25cba1fdc27db971aa2d9f1ab6bba19a9dd \ + --hash=sha256:436c8e9a4bdeeee84e3e59614d38c3dbd3235838a877af8c211cfcac8a80b8d3 \ + --hash=sha256:4a873a8180479bc829313e8d9798d5234dfacfc2e8a7ac188418189bb8eafbd2 \ + --hash=sha256:4acc65dd65da28060e206c8f27a573455ed724e6179941edb19f97e58161bb69 \ + --hash=sha256:51be5f8c349fdd1a5568e72713a21f518e7d6707bcf8503b528b88d33b57dc68 \ + --hash=sha256:546b7dd7e22f3c6861463bebb000646fa730e55df5ee4a0224408b5694cc6148 \ + --hash=sha256:5671338034b820c8d58c81ad1dafc0ed5a00771a82fccc71d6438df00302094b \ + --hash=sha256:637c58b468a69869258b8ae26f4a4c6ff8abffd4a8334c830ffb63e0feefe99a \ + --hash=sha256:767254ad364991ccfc4d81b8152912e53e103ec192d1bb4ea6b1f5a7117040be \ + --hash=sha256:7d484292eaeb3e84a51432a94f53578689ffdea3f90e10c8b203a99be5af57d8 \ + --hash=sha256:7f6bad22a791226d0a5c7c27a80a20e11cfe09ad5ef9084d4d3fc4a299cca505 \ + --hash=sha256:86f737708b366c36b76e953c46ba5827d8c27b7a8c9d0f471810728e5a2fe57c \ + --hash=sha256:8c6adc33561bd1d46f81131d5352348350fc23df4d742bb246cdfca606ea1208 \ + --hash=sha256:914b28d3215e0c721dc75db3ad6d62f51f630cb0c277e6b3bcb39519bed10bd8 \ + --hash=sha256:b44e6a09afc12952a7d2a58ca0a2429ee0d49a4f89d83a0a11052da696440e49 \ + --hash=sha256:bb0d9a1aaf5f1cb7967320e80690a1d7ff69f1d47ebc5a9bea013e3a21faec95 \ + --hash=sha256:c0b45c8b65b79337dee5134d038346d30e109e9e2e9d43464a2970e5c0e93229 \ + --hash=sha256:c2e698cb0c6dda9372ea98a0344245ee65bdc1c9dd939cceed6bb91256837896 \ + --hash=sha256:c78a22e95182fb2e7874712433eaa610478a3caf86f28c621708d35fa4fd6e7f \ + --hash=sha256:e062aa24638bb5018b7841977c360d2f5917268d125c833a686b7cbabbec496c \ + --hash=sha256:e5e18e5b14a7560d8acf1c596688f4dfd19b4f2945b245a71e5af4ddb7422feb \ + --hash=sha256:eae430ecf5794cb7ae7fa3808740b015aa80747e5266153128ef055975a72b99 \ + --hash=sha256:ee84ca3c58fe48b8ddafdeb1db87388dce2c3c3f701bf447b05e4cfcc3679112 \ + --hash=sha256:f042f66d0b4ae6d48e70e28d487376204d3cbf43b84c03bac57e28dac6151581 \ + --hash=sha256:f8db2f125746e44dce707dd44d4f4efeea8d7e2b43aace3f8d1f235cfa2733dd \ + --hash=sha256:f93fc78fe8bf15afe2b8d6b6499f1c73953169fad1e9a8dd086cdff3190e7fdf +oauthlib==3.2.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca \ + --hash=sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918 +opensearch-py==2.3.1 ; python_version >= "3.10" and python_version < "4" \ + --hash=sha256:eafbc5d56a7ca696afba7d77bcda1bbb849050cbf9265d57d8476576cb576395 \ + --hash=sha256:f82a2e914835f7d645a632777de9a62d0c0de60ffd2f8cdae2ccfa4cfc40a185 +orjson==3.9.7 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:01d647b2a9c45a23a84c3e70e19d120011cba5f56131d185c1b78685457320bb \ + --hash=sha256:0eb850a87e900a9c484150c414e21af53a6125a13f6e378cf4cc11ae86c8f9c5 \ + --hash=sha256:11c10f31f2c2056585f89d8229a56013bc2fe5de51e095ebc71868d070a8dd81 \ + --hash=sha256:14d3fb6cd1040a4a4a530b28e8085131ed94ebc90d72793c59a713de34b60838 \ + --hash=sha256:154fd67216c2ca38a2edb4089584504fbb6c0694b518b9020ad35ecc97252bb9 \ + --hash=sha256:1c3cee5c23979deb8d1b82dc4cc49be59cccc0547999dbe9adb434bb7af11cf7 \ + --hash=sha256:1eb0b0b2476f357eb2975ff040ef23978137aa674cd86204cfd15d2d17318588 \ + --hash=sha256:1f8b47650f90e298b78ecf4df003f66f54acdba6a0f763cc4df1eab048fe3738 \ + --hash=sha256:21a3344163be3b2c7e22cef14fa5abe957a892b2ea0525ee86ad8186921b6cf0 \ + --hash=sha256:23be6b22aab83f440b62a6f5975bcabeecb672bc627face6a83bc7aeb495dc7e \ + --hash=sha256:26ffb398de58247ff7bde895fe30817a036f967b0ad0e1cf2b54bda5f8dcfdd9 \ + --hash=sha256:2f8fcf696bbbc584c0c7ed4adb92fd2ad7d153a50258842787bc1524e50d7081 \ + --hash=sha256:355efdbbf0cecc3bd9b12589b8f8e9f03c813a115efa53f8dc2a523bfdb01334 \ + --hash=sha256:36b1df2e4095368ee388190687cb1b8557c67bc38400a942a1a77713580b50ae \ + --hash=sha256:38e34c3a21ed41a7dbd5349e24c3725be5416641fdeedf8f56fcbab6d981c900 \ + --hash=sha256:3aab72d2cef7f1dd6104c89b0b4d6b416b0db5ca87cc2fac5f79c5601f549cc2 \ + --hash=sha256:410aa9d34ad1089898f3db461b7b744d0efcf9252a9415bbdf23540d4f67589f \ + --hash=sha256:45a47f41b6c3beeb31ac5cf0ff7524987cfcce0a10c43156eb3ee8d92d92bf22 \ + --hash=sha256:4891d4c934f88b6c29b56395dfc7014ebf7e10b9e22ffd9877784e16c6b2064f \ + --hash=sha256:4c616b796358a70b1f675a24628e4823b67d9e376df2703e893da58247458956 \ + --hash=sha256:5198633137780d78b86bb54dafaaa9baea698b4f059456cd4554ab7009619221 \ + --hash=sha256:5a2937f528c84e64be20cb80e70cea76a6dfb74b628a04dab130679d4454395c \ + --hash=sha256:5da9032dac184b2ae2da4bce423edff7db34bfd936ebd7d4207ea45840f03905 \ + --hash=sha256:5e736815b30f7e3c9044ec06a98ee59e217a833227e10eb157f44071faddd7c5 \ + --hash=sha256:63ef3d371ea0b7239ace284cab9cd00d9c92b73119a7c274b437adb09bda35e6 \ + --hash=sha256:70b9a20a03576c6b7022926f614ac5a6b0914486825eac89196adf3267c6489d \ + --hash=sha256:76a0fc023910d8a8ab64daed8d31d608446d2d77c6474b616b34537aa7b79c7f \ + --hash=sha256:7951af8f2998045c656ba8062e8edf5e83fd82b912534ab1de1345de08a41d2b \ + --hash=sha256:7a34a199d89d82d1897fd4a47820eb50947eec9cda5fd73f4578ff692a912f89 \ + --hash=sha256:7bab596678d29ad969a524823c4e828929a90c09e91cc438e0ad79b37ce41166 \ + --hash=sha256:7ea3e63e61b4b0beeb08508458bdff2daca7a321468d3c4b320a758a2f554d31 \ + --hash=sha256:80acafe396ab689a326ab0d80f8cc61dec0dd2c5dca5b4b3825e7b1e0132c101 \ + --hash=sha256:82720ab0cf5bb436bbd97a319ac529aee06077ff7e61cab57cee04a596c4f9b4 \ + --hash=sha256:83cc275cf6dcb1a248e1876cdefd3f9b5f01063854acdfd687ec360cd3c9712a \ + --hash=sha256:85e39198f78e2f7e054d296395f6c96f5e02892337746ef5b6a1bf3ed5910142 \ + --hash=sha256:8769806ea0b45d7bf75cad253fba9ac6700b7050ebb19337ff6b4e9060f963fa \ + --hash=sha256:8bdb6c911dae5fbf110fe4f5cba578437526334df381b3554b6ab7f626e5eeca \ + --hash=sha256:8f4b0042d8388ac85b8330b65406c84c3229420a05068445c13ca28cc222f1f7 \ + --hash=sha256:90fe73a1f0321265126cbba13677dcceb367d926c7a65807bd80916af4c17047 \ + --hash=sha256:915e22c93e7b7b636240c5a79da5f6e4e84988d699656c8e27f2ac4c95b8dcc0 \ + --hash=sha256:9274ba499e7dfb8a651ee876d80386b481336d3868cba29af839370514e4dce0 \ + --hash=sha256:9d62c583b5110e6a5cf5169ab616aa4ec71f2c0c30f833306f9e378cf51b6c86 \ + --hash=sha256:9ef82157bbcecd75d6296d5d8b2d792242afcd064eb1ac573f8847b52e58f677 \ + --hash=sha256:a19e4074bc98793458b4b3ba35a9a1d132179345e60e152a1bb48c538ab863c4 \ + --hash=sha256:a347d7b43cb609e780ff8d7b3107d4bcb5b6fd09c2702aa7bdf52f15ed09fa09 \ + --hash=sha256:b4fb306c96e04c5863d52ba8d65137917a3d999059c11e659eba7b75a69167bd \ + --hash=sha256:b6df858e37c321cefbf27fe7ece30a950bcc3a75618a804a0dcef7ed9dd9c92d \ + --hash=sha256:b8e59650292aa3a8ea78073fc84184538783966528e442a1b9ed653aa282edcf \ + --hash=sha256:bcb9a60ed2101af2af450318cd89c6b8313e9f8df4e8fb12b657b2e97227cf08 \ + --hash=sha256:c3ba725cf5cf87d2d2d988d39c6a2a8b6fc983d78ff71bc728b0be54c869c884 \ + --hash=sha256:ca1706e8b8b565e934c142db6a9592e6401dc430e4b067a97781a997070c5378 \ + --hash=sha256:cd3e7aae977c723cc1dbb82f97babdb5e5fbce109630fbabb2ea5053523c89d3 \ + --hash=sha256:cf334ce1d2fadd1bf3e5e9bf15e58e0c42b26eb6590875ce65bd877d917a58aa \ + --hash=sha256:d8692948cada6ee21f33db5e23460f71c8010d6dfcfe293c9b96737600a7df78 \ + --hash=sha256:e5205ec0dfab1887dd383597012199f5175035e782cdb013c542187d280ca443 \ + --hash=sha256:e7e7f44e091b93eb39db88bb0cb765db09b7a7f64aea2f35e7d86cbf47046c65 \ + --hash=sha256:e94b7b31aa0d65f5b7c72dd8f8227dbd3e30354b99e7a9af096d967a77f2a580 \ + --hash=sha256:f26fb3e8e3e2ee405c947ff44a3e384e8fa1843bc35830fe6f3d9a95a1147b6e \ + --hash=sha256:f738fee63eb263530efd4d2e9c76316c1f47b3bbf38c1bf45ae9625feed0395e \ + --hash=sha256:f9e01239abea2f52a429fe9d95c96df95f078f0172489d691b4a848ace54a476 +packaging==23.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ + --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 +pandas==2.1.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:02304e11582c5d090e5a52aec726f31fe3f42895d6bfc1f28738f9b64b6f0614 \ + --hash=sha256:0489b0e6aa3d907e909aef92975edae89b1ee1654db5eafb9be633b0124abe97 \ + --hash=sha256:05674536bd477af36aa2effd4ec8f71b92234ce0cc174de34fd21e2ee99adbc2 \ + --hash=sha256:25e8474a8eb258e391e30c288eecec565bfed3e026f312b0cbd709a63906b6f8 \ + --hash=sha256:29deb61de5a8a93bdd033df328441a79fcf8dd3c12d5ed0b41a395eef9cd76f0 \ + --hash=sha256:366da7b0e540d1b908886d4feb3d951f2f1e572e655c1160f5fde28ad4abb750 \ + --hash=sha256:3bcad1e6fb34b727b016775bea407311f7721db87e5b409e6542f4546a4951ea \ + --hash=sha256:4c3f32fd7c4dccd035f71734df39231ac1a6ff95e8bdab8d891167197b7018d2 \ + --hash=sha256:4cdb0fab0400c2cb46dafcf1a0fe084c8bb2480a1fa8d81e19d15e12e6d4ded2 \ + --hash=sha256:4f99bebf19b7e03cf80a4e770a3e65eee9dd4e2679039f542d7c1ace7b7b1daa \ + --hash=sha256:58d997dbee0d4b64f3cb881a24f918b5f25dd64ddf31f467bb9b67ae4c63a1e4 \ + --hash=sha256:75ce97667d06d69396d72be074f0556698c7f662029322027c226fd7a26965cb \ + --hash=sha256:84e7e910096416adec68075dc87b986ff202920fb8704e6d9c8c9897fe7332d6 \ + --hash=sha256:9e2959720b70e106bb1d8b6eadd8ecd7c8e99ccdbe03ee03260877184bb2877d \ + --hash=sha256:9e50e72b667415a816ac27dfcfe686dc5a0b02202e06196b943d54c4f9c7693e \ + --hash=sha256:a0dbfea0dd3901ad4ce2306575c54348d98499c95be01b8d885a2737fe4d7a98 \ + --hash=sha256:b407381258a667df49d58a1b637be33e514b07f9285feb27769cedb3ab3d0b3a \ + --hash=sha256:b8bd1685556f3374520466998929bade3076aeae77c3e67ada5ed2b90b4de7f0 \ + --hash=sha256:c1f84c144dee086fe4f04a472b5cd51e680f061adf75c1ae4fc3a9275560f8f4 \ + --hash=sha256:c747793c4e9dcece7bb20156179529898abf505fe32cb40c4052107a3c620b49 \ + --hash=sha256:cc1ab6a25da197f03ebe6d8fa17273126120874386b4ac11c1d687df288542dd \ + --hash=sha256:dc3657869c7902810f32bd072f0740487f9e030c1a3ab03e0af093db35a9d14e \ + --hash=sha256:f5ec7740f9ccb90aec64edd71434711f58ee0ea7f5ed4ac48be11cfa9abf7317 \ + --hash=sha256:fecb198dc389429be557cde50a2d46da8434a17fe37d7d41ff102e3987fd947b \ + --hash=sha256:ffa8f0966de2c22de408d0e322db2faed6f6e74265aa0856f3824813cf124363 +pefile==2023.2.7 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc \ + --hash=sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6 +pip==23.2.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be \ + --hash=sha256:fb0bd5435b3200c602b5bf61d2d43c2f13c02e29c1707567ae7fbc514eb9faf2 +plaso==20230717 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:028f00eabd4e7824bab3fe592518a8a095cdca5b204c28792aacfdf1e3489a64 +portalocker==2.8.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2b035aa7828e46c58e9b31390ee1f169b98e1066ab10b9a6a861fe7e25ee4f33 \ + --hash=sha256:cfb86acc09b9aa7c3b43594e19be1345b9d16af3feb08bf92f23d4dce513a28e +prometheus-client==0.17.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091 \ + --hash=sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101 +prompt-toolkit==3.0.39 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac \ + --hash=sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88 +protobuf==3.20.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7 \ + --hash=sha256:28545383d61f55b57cf4df63eebd9827754fd2dc25f80c5253f9184235db242c \ + --hash=sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2 \ + --hash=sha256:398a9e0c3eaceb34ec1aee71894ca3299605fa8e761544934378bbc6c97de23b \ + --hash=sha256:44246bab5dd4b7fbd3c0c80b6f16686808fab0e4aca819ade6e8d294a29c7050 \ + --hash=sha256:447d43819997825d4e71bf5769d869b968ce96848b6479397e29fc24c4a5dfe9 \ + --hash=sha256:67a3598f0a2dcbc58d02dd1928544e7d88f764b47d4a286202913f0b2801c2e7 \ + --hash=sha256:74480f79a023f90dc6e18febbf7b8bac7508420f2006fabd512013c0c238f454 \ + --hash=sha256:819559cafa1a373b7096a482b504ae8a857c89593cf3a25af743ac9ecbd23480 \ + --hash=sha256:899dc660cd599d7352d6f10d83c95df430a38b410c1b66b407a6b29265d66469 \ + --hash=sha256:8c0c984a1b8fef4086329ff8dd19ac77576b384079247c770f29cc8ce3afa06c \ + --hash=sha256:9aae4406ea63d825636cc11ffb34ad3379335803216ee3a856787bcf5ccc751e \ + --hash=sha256:a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db \ + --hash=sha256:b6cc7ba72a8850621bfec987cb72623e703b7fe2b9127a161ce61e61558ad905 \ + --hash=sha256:bf01b5720be110540be4286e791db73f84a2b721072a3711efff6c324cdf074b \ + --hash=sha256:c02ce36ec760252242a33967d51c289fd0e1c0e6e5cc9397e2279177716add86 \ + --hash=sha256:d9e4432ff660d67d775c66ac42a67cf2453c27cb4d738fc22cb53b5d84c135d4 \ + --hash=sha256:daa564862dd0d39c00f8086f88700fdbe8bc717e993a21e90711acfed02f2402 \ + --hash=sha256:de78575669dddf6099a8a0f46a27e82a1783c557ccc38ee620ed8cc96d3be7d7 \ + --hash=sha256:e64857f395505ebf3d2569935506ae0dfc4a15cb80dc25261176c784662cdcc4 \ + --hash=sha256:f4bd856d702e5b0d96a00ec6b307b0f51c1982c2bf9c0052cf9019e9a544ba99 \ + --hash=sha256:f4c42102bc82a51108e449cbb32b19b180022941c727bac0cfd50170341f16ee +psutil==5.9.5 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d \ + --hash=sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217 \ + --hash=sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4 \ + --hash=sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c \ + --hash=sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f \ + --hash=sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da \ + --hash=sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4 \ + --hash=sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42 \ + --hash=sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5 \ + --hash=sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4 \ + --hash=sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9 \ + --hash=sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f \ + --hash=sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30 \ + --hash=sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48 +psycopg2-binary==2.9.9 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9 \ + --hash=sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77 \ + --hash=sha256:0c009475ee389757e6e34611d75f6e4f05f0cf5ebb76c6037508318e1a1e0d7e \ + --hash=sha256:0ef4854e82c09e84cc63084a9e4ccd6d9b154f1dbdd283efb92ecd0b5e2b8c84 \ + --hash=sha256:1236ed0952fbd919c100bc839eaa4a39ebc397ed1c08a97fc45fee2a595aa1b3 \ + --hash=sha256:143072318f793f53819048fdfe30c321890af0c3ec7cb1dfc9cc87aa88241de2 \ + --hash=sha256:15208be1c50b99203fe88d15695f22a5bed95ab3f84354c494bcb1d08557df67 \ + --hash=sha256:1873aade94b74715be2246321c8650cabf5a0d098a95bab81145ffffa4c13876 \ + --hash=sha256:18d0ef97766055fec15b5de2c06dd8e7654705ce3e5e5eed3b6651a1d2a9a152 \ + --hash=sha256:1ea665f8ce695bcc37a90ee52de7a7980be5161375d42a0b6c6abedbf0d81f0f \ + --hash=sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a \ + --hash=sha256:246b123cc54bb5361588acc54218c8c9fb73068bf227a4a531d8ed56fa3ca7d6 \ + --hash=sha256:275ff571376626195ab95a746e6a04c7df8ea34638b99fc11160de91f2fef503 \ + --hash=sha256:281309265596e388ef483250db3640e5f414168c5a67e9c665cafce9492eda2f \ + --hash=sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493 \ + --hash=sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996 \ + --hash=sha256:30dcc86377618a4c8f3b72418df92e77be4254d8f89f14b8e8f57d6d43603c0f \ + --hash=sha256:31a34c508c003a4347d389a9e6fcc2307cc2150eb516462a7a17512130de109e \ + --hash=sha256:323ba25b92454adb36fa425dc5cf6f8f19f78948cbad2e7bc6cdf7b0d7982e59 \ + --hash=sha256:34eccd14566f8fe14b2b95bb13b11572f7c7d5c36da61caf414d23b91fcc5d94 \ + --hash=sha256:3a58c98a7e9c021f357348867f537017057c2ed7f77337fd914d0bedb35dace7 \ + --hash=sha256:3f78fd71c4f43a13d342be74ebbc0666fe1f555b8837eb113cb7416856c79682 \ + --hash=sha256:4154ad09dac630a0f13f37b583eae260c6aa885d67dfbccb5b02c33f31a6d420 \ + --hash=sha256:420f9bbf47a02616e8554e825208cb947969451978dceb77f95ad09c37791dae \ + --hash=sha256:4686818798f9194d03c9129a4d9a702d9e113a89cb03bffe08c6cf799e053291 \ + --hash=sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe \ + --hash=sha256:60989127da422b74a04345096c10d416c2b41bd7bf2a380eb541059e4e999980 \ + --hash=sha256:68fc1f1ba168724771e38bee37d940d2865cb0f562380a1fb1ffb428b75cb692 \ + --hash=sha256:6e6f98446430fdf41bd36d4faa6cb409f5140c1c2cf58ce0bbdaf16af7d3f119 \ + --hash=sha256:729177eaf0aefca0994ce4cffe96ad3c75e377c7b6f4efa59ebf003b6d398716 \ + --hash=sha256:72dffbd8b4194858d0941062a9766f8297e8868e1dd07a7b36212aaa90f49472 \ + --hash=sha256:75723c3c0fbbf34350b46a3199eb50638ab22a0228f93fb472ef4d9becc2382b \ + --hash=sha256:77853062a2c45be16fd6b8d6de2a99278ee1d985a7bd8b103e97e41c034006d2 \ + --hash=sha256:78151aa3ec21dccd5cdef6c74c3e73386dcdfaf19bced944169697d7ac7482fc \ + --hash=sha256:7f01846810177d829c7692f1f5ada8096762d9172af1b1a28d4ab5b77c923c1c \ + --hash=sha256:804d99b24ad523a1fe18cc707bf741670332f7c7412e9d49cb5eab67e886b9b5 \ + --hash=sha256:8359bf4791968c5a78c56103702000105501adb557f3cf772b2c207284273984 \ + --hash=sha256:83791a65b51ad6ee6cf0845634859d69a038ea9b03d7b26e703f94c7e93dbcf9 \ + --hash=sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf \ + --hash=sha256:876801744b0dee379e4e3c38b76fc89f88834bb15bf92ee07d94acd06ec890a0 \ + --hash=sha256:8dbf6d1bc73f1d04ec1734bae3b4fb0ee3cb2a493d35ede9badbeb901fb40f6f \ + --hash=sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212 \ + --hash=sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb \ + --hash=sha256:977646e05232579d2e7b9c59e21dbe5261f403a88417f6a6512e70d3f8a046be \ + --hash=sha256:9dba73be7305b399924709b91682299794887cbbd88e38226ed9f6712eabee90 \ + --hash=sha256:a148c5d507bb9b4f2030a2025c545fccb0e1ef317393eaba42e7eabd28eb6041 \ + --hash=sha256:a6cdcc3ede532f4a4b96000b6362099591ab4a3e913d70bcbac2b56c872446f7 \ + --hash=sha256:ac05fb791acf5e1a3e39402641827780fe44d27e72567a000412c648a85ba860 \ + --hash=sha256:b58b4710c7f4161b5e9dcbe73bb7c62d65670a87df7bcce9e1faaad43e715245 \ + --hash=sha256:b6356793b84728d9d50ead16ab43c187673831e9d4019013f1402c41b1db9b27 \ + --hash=sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417 \ + --hash=sha256:bc7bb56d04601d443f24094e9e31ae6deec9ccb23581f75343feebaf30423359 \ + --hash=sha256:c2470da5418b76232f02a2fcd2229537bb2d5a7096674ce61859c3229f2eb202 \ + --hash=sha256:c332c8d69fb64979ebf76613c66b985414927a40f8defa16cf1bc028b7b0a7b0 \ + --hash=sha256:c6af2a6d4b7ee9615cbb162b0738f6e1fd1f5c3eda7e5da17861eacf4c717ea7 \ + --hash=sha256:c77e3d1862452565875eb31bdb45ac62502feabbd53429fdc39a1cc341d681ba \ + --hash=sha256:ca08decd2697fdea0aea364b370b1249d47336aec935f87b8bbfd7da5b2ee9c1 \ + --hash=sha256:ca49a8119c6cbd77375ae303b0cfd8c11f011abbbd64601167ecca18a87e7cdd \ + --hash=sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07 \ + --hash=sha256:d2997c458c690ec2bc6b0b7ecbafd02b029b7b4283078d3b32a852a7ce3ddd98 \ + --hash=sha256:d3f82c171b4ccd83bbaf35aa05e44e690113bd4f3b7b6cc54d2219b132f3ae55 \ + --hash=sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d \ + --hash=sha256:ead20f7913a9c1e894aebe47cccf9dc834e1618b7aa96155d2091a626e59c972 \ + --hash=sha256:ebdc36bea43063116f0486869652cb2ed7032dbc59fbcb4445c4862b5c1ecf7f \ + --hash=sha256:ed1184ab8f113e8d660ce49a56390ca181f2981066acc27cf637d5c1e10ce46e \ + --hash=sha256:ee825e70b1a209475622f7f7b776785bd68f34af6e7a46e2e42f27b659b5bc26 \ + --hash=sha256:f7ae5d65ccfbebdfa761585228eb4d0df3a8b15cfb53bd953e713e09fbb12957 \ + --hash=sha256:f7fc5a5acafb7d6ccca13bfa8c90f8c51f13d8fb87d95656d3950f0158d3ce53 \ + --hash=sha256:f9b5571d33660d5009a8b3c25dc1db560206e2d2f89d3df1cb32d72c0d117d52 +puremagic==1.15 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:349e179f04bcc14eb0e2c3941cd9ee4ea74881ab6ccac63ea0c37c98f7a80b22 \ + --hash=sha256:6e46aa78113a466abc9f69e6e8a4ce90eb57d908dafb809597012621061462bd +pyasn1-modules==0.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c \ + --hash=sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d +pyasn1==0.5.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57 \ + --hash=sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde +pycparser==2.21 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ + --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 +pycryptodome==3.19.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0101f647d11a1aae5a8ce4f5fad6644ae1b22bb65d05accc7d322943c69a74a6 \ + --hash=sha256:04dd31d3b33a6b22ac4d432b3274588917dcf850cc0c51c84eca1d8ed6933810 \ + --hash=sha256:05e33267394aad6db6595c0ce9d427fe21552f5425e116a925455e099fdf759a \ + --hash=sha256:08ce3558af5106c632baf6d331d261f02367a6bc3733086ae43c0f988fe042db \ + --hash=sha256:139ae2c6161b9dd5d829c9645d781509a810ef50ea8b657e2257c25ca20efe33 \ + --hash=sha256:17940dcf274fcae4a54ec6117a9ecfe52907ed5e2e438fe712fe7ca502672ed5 \ + --hash=sha256:190c53f51e988dceb60472baddce3f289fa52b0ec38fbe5fd20dd1d0f795c551 \ + --hash=sha256:22e0ae7c3a7f87dcdcf302db06ab76f20e83f09a6993c160b248d58274473bfa \ + --hash=sha256:3006c44c4946583b6de24fe0632091c2653d6256b99a02a3db71ca06472ea1e4 \ + --hash=sha256:45430dfaf1f421cf462c0dd824984378bef32b22669f2635cb809357dbaab405 \ + --hash=sha256:506c686a1eee6c00df70010be3b8e9e78f406af4f21b23162bbb6e9bdf5427bc \ + --hash=sha256:536f676963662603f1f2e6ab01080c54d8cd20f34ec333dcb195306fa7826997 \ + --hash=sha256:542f99d5026ac5f0ef391ba0602f3d11beef8e65aae135fa5b762f5ebd9d3bfb \ + --hash=sha256:560591c0777f74a5da86718f70dfc8d781734cf559773b64072bbdda44b3fc3e \ + --hash=sha256:5b1986c761258a5b4332a7f94a83f631c1ffca8747d75ab8395bf2e1b93283d9 \ + --hash=sha256:61bb3ccbf4bf32ad9af32da8badc24e888ae5231c617947e0f5401077f8b091f \ + --hash=sha256:7822f36d683f9ad7bc2145b2c2045014afdbbd1d9922a6d4ce1cbd6add79a01e \ + --hash=sha256:7919ccd096584b911f2a303c593280869ce1af9bf5d36214511f5e5a1bed8c34 \ + --hash=sha256:7c760c8a0479a4042111a8dd2f067d3ae4573da286c53f13cf6f5c53a5c1f631 \ + --hash=sha256:829b813b8ee00d9c8aba417621b94bc0b5efd18c928923802ad5ba4cf1ec709c \ + --hash=sha256:84c3e4fffad0c4988aef0d5591be3cad4e10aa7db264c65fadbc633318d20bde \ + --hash=sha256:8999316e57abcbd8085c91bc0ef75292c8618f41ca6d2b6132250a863a77d1e7 \ + --hash=sha256:8c1601e04d32087591d78e0b81e1e520e57a92796089864b20e5f18c9564b3fa \ + --hash=sha256:a0ab84755f4539db086db9ba9e9f3868d2e3610a3948cbd2a55e332ad83b01b0 \ + --hash=sha256:a9bcd5f3794879e91970f2bbd7d899780541d3ff439d8f2112441769c9f2ccea \ + --hash=sha256:bc35d463222cdb4dbebd35e0784155c81e161b9284e567e7e933d722e533331e \ + --hash=sha256:c1cc2f2ae451a676def1a73c1ae9120cd31af25db3f381893d45f75e77be2400 \ + --hash=sha256:d033947e7fd3e2ba9a031cb2d267251620964705a013c5a461fa5233cc025270 \ + --hash=sha256:d04f5f623a280fbd0ab1c1d8ecbd753193ab7154f09b6161b0f857a1a676c15f \ + --hash=sha256:d49a6c715d8cceffedabb6adb7e0cbf41ae1a2ff4adaeec9432074a80627dea1 \ + --hash=sha256:e249a784cc98a29c77cea9df54284a44b40cafbfae57636dd2f8775b48af2434 \ + --hash=sha256:fc7a79590e2b5d08530175823a242de6790abc73638cc6dc9d2684e7be2f5e49 +pycryptodomex==3.19.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:09c9401dc06fb3d94cb1ec23b4ea067a25d1f4c6b7b118ff5631d0b5daaab3cc \ + --hash=sha256:0b2f1982c5bc311f0aab8c293524b861b485d76f7c9ab2c3ac9a25b6f7655975 \ + --hash=sha256:136b284e9246b4ccf4f752d435c80f2c44fc2321c198505de1d43a95a3453b3c \ + --hash=sha256:1789d89f61f70a4cd5483d4dfa8df7032efab1118f8b9894faae03c967707865 \ + --hash=sha256:2126bc54beccbede6eade00e647106b4f4c21e5201d2b0a73e9e816a01c50905 \ + --hash=sha256:258c4233a3fe5a6341780306a36c6fb072ef38ce676a6d41eec3e591347919e8 \ + --hash=sha256:263de9a96d2fcbc9f5bd3a279f14ea0d5f072adb68ebd324987576ec25da084d \ + --hash=sha256:50cb18d4dd87571006fd2447ccec85e6cec0136632a550aa29226ba075c80644 \ + --hash=sha256:5b883e1439ab63af976656446fb4839d566bb096f15fc3c06b5a99cde4927188 \ + --hash=sha256:5d73e9fa3fe830e7b6b42afc49d8329b07a049a47d12e0ef9225f2fd220f19b2 \ + --hash=sha256:61056a1fd3254f6f863de94c233b30dd33bc02f8c935b2000269705f1eeeffa4 \ + --hash=sha256:67c8eb79ab33d0fbcb56842992298ddb56eb6505a72369c20f60bc1d2b6fb002 \ + --hash=sha256:6e45bb4635b3c4e0a00ca9df75ef6295838c85c2ac44ad882410cb631ed1eeaa \ + --hash=sha256:7cb51096a6a8d400724104db8a7e4f2206041a1f23e58924aa3d8d96bcb48338 \ + --hash=sha256:800a2b05cfb83654df80266692f7092eeefe2a314fa7901dcefab255934faeec \ + --hash=sha256:8df69e41f7e7015a90b94d1096ec3d8e0182e73449487306709ec27379fff761 \ + --hash=sha256:917033016ecc23c8933205585a0ab73e20020fdf671b7cd1be788a5c4039840b \ + --hash=sha256:a12144d785518f6491ad334c75ccdc6ad52ea49230b4237f319dbb7cef26f464 \ + --hash=sha256:a3866d68e2fc345162b1b9b83ef80686acfe5cec0d134337f3b03950a0a8bf56 \ + --hash=sha256:a588a1cb7781da9d5e1c84affd98c32aff9c89771eac8eaa659d2760666f7139 \ + --hash=sha256:a77b79852175064c822b047fee7cf5a1f434f06ad075cc9986aa1c19a0c53eb0 \ + --hash=sha256:af83a554b3f077564229865c45af0791be008ac6469ef0098152139e6bd4b5b6 \ + --hash=sha256:b801216c48c0886742abf286a9a6b117e248ca144d8ceec1f931ce2dd0c9cb40 \ + --hash=sha256:bfb040b5dda1dff1e197d2ef71927bd6b8bfcb9793bc4dfe0bb6df1e691eaacb \ + --hash=sha256:c01678aee8ac0c1a461cbc38ad496f953f9efcb1fa19f5637cbeba7544792a53 \ + --hash=sha256:c74eb1f73f788facece7979ce91594dc177e1a9b5d5e3e64697dd58299e5cb4d \ + --hash=sha256:c9a68a2f7bd091ccea54ad3be3e9d65eded813e6d79fdf4cc3604e26cdd6384f \ + --hash=sha256:d4dd3b381ff5a5907a3eb98f5f6d32c64d319a840278ceea1dcfcc65063856f3 \ + --hash=sha256:e8e5ecbd4da4157889fce8ba49da74764dd86c891410bfd6b24969fa46edda51 \ + --hash=sha256:eb2fc0ec241bf5e5ef56c8fbec4a2634d631e4c4f616a59b567947a0f35ad83c \ + --hash=sha256:edbe083c299835de7e02c8aa0885cb904a75087d35e7bab75ebe5ed336e8c3e2 \ + --hash=sha256:ff64fd720def623bf64d8776f8d0deada1cc1bf1ec3c1f9d6f5bb5bd098d034f +pydantic==1.10.5 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1fd326aff5d6c36f05735c7c9b3d5b0e933b4ca52ad0b6e4b38038d82703d35b \ + --hash=sha256:2185a3b3d98ab4506a3f6707569802d2d92c3a7ba3a9a35683a7709ea6c2aaa2 \ + --hash=sha256:261f357f0aecda005934e413dfd7aa4077004a174dafe414a8325e6098a8e419 \ + --hash=sha256:305d0376c516b0dfa1dbefeae8c21042b57b496892d721905a6ec6b79494a66d \ + --hash=sha256:3257bd714de9db2102b742570a56bf7978e90441193acac109b1f500290f5718 \ + --hash=sha256:3353072625ea2a9a6c81ad01b91e5c07fa70deb06368c71307529abf70d23325 \ + --hash=sha256:36e44a4de37b8aecffa81c081dbfe42c4d2bf9f6dff34d03dce157ec65eb0f15 \ + --hash=sha256:3bb99cf9655b377db1a9e47fa4479e3330ea96f4123c6c8200e482704bf1eda2 \ + --hash=sha256:3f9d9b2be177c3cb6027cd67fbf323586417868c06c3c85d0d101703136e6b31 \ + --hash=sha256:45edea10b75d3da43cfda12f3792833a3fa70b6eee4db1ed6aed528cef17c74e \ + --hash=sha256:51782fd81f09edcf265823c3bf43ff36d00db246eca39ee765ef58dc8421a642 \ + --hash=sha256:532e97c35719f137ee5405bd3eeddc5c06eb91a032bc755a44e34a712420daf3 \ + --hash=sha256:58e41dd1e977531ac6073b11baac8c013f3cd8706a01d3dc74e86955be8b2c0c \ + --hash=sha256:5920824fe1e21cbb3e38cf0f3dd24857c8959801d1031ce1fac1d50857a03bfb \ + --hash=sha256:5f3bc8f103b56a8c88021d481410874b1f13edf6e838da607dcb57ecff9b4594 \ + --hash=sha256:63200cd8af1af2c07964546b7bc8f217e8bda9d0a2ef0ee0c797b36353914984 \ + --hash=sha256:663d2dd78596c5fa3eb996bc3f34b8c2a592648ad10008f98d1348be7ae212fb \ + --hash=sha256:6a4b0aab29061262065bbdede617ef99cc5914d1bf0ddc8bcd8e3d7928d85bd6 \ + --hash=sha256:6bb0452d7b8516178c969d305d9630a3c9b8cf16fcf4713261c9ebd465af0d73 \ + --hash=sha256:72ef3783be8cbdef6bca034606a5de3862be6b72415dc5cb1fb8ddbac110049a \ + --hash=sha256:76c930ad0746c70f0368c4596020b736ab65b473c1f9b3872310a835d852eb19 \ + --hash=sha256:7c5b94d598c90f2f46b3a983ffb46ab806a67099d118ae0da7ef21a2a4033b28 \ + --hash=sha256:7ce1612e98c6326f10888df951a26ec1a577d8df49ddcaea87773bfbe23ba5cc \ + --hash=sha256:8481dca324e1c7b715ce091a698b181054d22072e848b6fc7895cd86f79b4449 \ + --hash=sha256:87f831e81ea0589cd18257f84386bf30154c5f4bed373b7b75e5cb0b5d53ea87 \ + --hash=sha256:9a9d9155e2a9f38b2eb9374c88f02fd4d6851ae17b65ee786a87d032f87008f8 \ + --hash=sha256:9e337ac83686645a46db0e825acceea8e02fca4062483f40e9ae178e8bd1103a \ + --hash=sha256:b429f7c457aebb7fbe7cd69c418d1cd7c6fdc4d3c8697f45af78b8d5a7955760 \ + --hash=sha256:b473d00ccd5c2061fd896ac127b7755baad233f8d996ea288af14ae09f8e0d1e \ + --hash=sha256:bd46a0e6296346c477e59a954da57beaf9c538da37b9df482e50f836e4a7d4bb \ + --hash=sha256:c428c0f64a86661fb4873495c4fac430ec7a7cef2b8c1c28f3d1a7277f9ea5ab \ + --hash=sha256:c9e5b778b6842f135902e2d82624008c6a79710207e28e86966cd136c621bfee \ + --hash=sha256:ca9075ab3de9e48b75fa8ccb897c34ccc1519177ad8841d99f7fd74cf43be5bf \ + --hash=sha256:f582cac9d11c227c652d3ce8ee223d94eb06f4228b52a8adaafa9fa62e73d5c9 \ + --hash=sha256:f5bee6c523d13944a1fdc6f0525bc86dbbd94372f17b83fa6331aabacc8fd08e \ + --hash=sha256:f836444b4c5ece128b23ec36a446c9ab7f9b0f7981d0d27e13a7c366ee163f8a +pyhindsight==20230327.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:65bcd250b8ff0a32f5fd360a62e2d3fa2b9dbbe461bd9c15300b60ce7e13879d \ + --hash=sha256:f2ac1279def87f8e44804c2b530c3f58caaf0145a017d436ce732a98f6bc2cf5 +pyjwt==2.8.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de \ + --hash=sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320 +pyjwt[crypto]==2.8.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de \ + --hash=sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320 +pyopenssl==23.2.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2 \ + --hash=sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac +pyparsing==3.0.9 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ + --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc +python-dateutil==2.8.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \ + --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 +python-dotenv==1.0.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba \ + --hash=sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a +python-multipart==0.0.6 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:e9925a80bb668529f1b67c7fdb0a5dacdd7cbfc6fb0bff3ea443fe22bdd62132 \ + --hash=sha256:ee698bab5ef148b0a760751c261902cd096e57e10558e11aca17646b74ee1c18 +pytsk3==20230125 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4406a88490afcc649cd44aa3e8bd5e8b0767822c17c50cf6c6898fbb9605ac42 +pytz==2023.3.post1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b \ + --hash=sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7 +pywin32-ctypes==0.2.2 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32" \ + --hash=sha256:3426e063bdd5fd4df74a14fa3cf80a0b42845a87e1d1e81f6549f9daec593a60 \ + --hash=sha256:bf490a1a709baf35d688fe0ecf980ed4de11d2b3e37b51e5442587a75d9957e7 +pywin32==306 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "win32" or platform_system == "Windows") \ + --hash=sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d \ + --hash=sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65 \ + --hash=sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e \ + --hash=sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b \ + --hash=sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4 \ + --hash=sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040 \ + --hash=sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a \ + --hash=sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36 \ + --hash=sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8 \ + --hash=sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e \ + --hash=sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802 \ + --hash=sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a \ + --hash=sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407 \ + --hash=sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0 +pyxattr==0.8.1 ; python_version >= "3.10" and python_version < "4.0" and platform_system != "Windows" \ + --hash=sha256:48c578ecf8ea0bd4351b1752470e301a90a3761c7c21f00f953dcf6d6fa6ee5a +pyyaml==6.0.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ + --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ + --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ + --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ + --hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \ + --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ + --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ + --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ + --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ + --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ + --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ + --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ + --hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \ + --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ + --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ + --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ + --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ + --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ + --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ + --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ + --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ + --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ + --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ + --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ + --hash=sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0 \ + --hash=sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515 \ + --hash=sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c \ + --hash=sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c \ + --hash=sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924 \ + --hash=sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34 \ + --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ + --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ + --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ + --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ + --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ + --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ + --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ + --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ + --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ + --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f +pyzmq==25.1.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a \ + --hash=sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf \ + --hash=sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45 \ + --hash=sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505 \ + --hash=sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2 \ + --hash=sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e \ + --hash=sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f \ + --hash=sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2 \ + --hash=sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55 \ + --hash=sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd \ + --hash=sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2 \ + --hash=sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf \ + --hash=sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae \ + --hash=sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a \ + --hash=sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5 \ + --hash=sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222 \ + --hash=sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0 \ + --hash=sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b \ + --hash=sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23 \ + --hash=sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618 \ + --hash=sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062 \ + --hash=sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9 \ + --hash=sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414 \ + --hash=sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2 \ + --hash=sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a \ + --hash=sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f \ + --hash=sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa \ + --hash=sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123 \ + --hash=sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790 \ + --hash=sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb \ + --hash=sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76 \ + --hash=sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0 \ + --hash=sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6 \ + --hash=sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3 \ + --hash=sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978 \ + --hash=sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a \ + --hash=sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb \ + --hash=sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1 \ + --hash=sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6 \ + --hash=sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995 \ + --hash=sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7 \ + --hash=sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f \ + --hash=sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304 \ + --hash=sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e \ + --hash=sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e \ + --hash=sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849 \ + --hash=sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329 \ + --hash=sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71 \ + --hash=sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728 \ + --hash=sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115 \ + --hash=sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752 \ + --hash=sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8 \ + --hash=sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a \ + --hash=sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c \ + --hash=sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8 \ + --hash=sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8 \ + --hash=sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83 \ + --hash=sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c \ + --hash=sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69 \ + --hash=sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a \ + --hash=sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996 \ + --hash=sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3 \ + --hash=sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6 \ + --hash=sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369 \ + --hash=sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28 \ + --hash=sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075 \ + --hash=sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0 \ + --hash=sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c \ + --hash=sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca \ + --hash=sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9 \ + --hash=sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800 \ + --hash=sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6 \ + --hash=sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb \ + --hash=sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d \ + --hash=sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22 \ + --hash=sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb \ + --hash=sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71 \ + --hash=sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83 \ + --hash=sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae \ + --hash=sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb \ + --hash=sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d \ + --hash=sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2 \ + --hash=sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0 \ + --hash=sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7 \ + --hash=sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008 \ + --hash=sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762 \ + --hash=sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec \ + --hash=sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef \ + --hash=sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180 \ + --hash=sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787 \ + --hash=sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e \ + --hash=sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7 \ + --hash=sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4 +redis==4.4.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:68226f7ede928db8302f29ab088a157f41061fa946b7ae865452b6d7838bbffb \ + --hash=sha256:da92a39fec86438d3f1e2a1db33c312985806954fe860120b582a8430e231d8f +requests-oauthlib==1.3.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5 \ + --hash=sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a +requests==2.31.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 +rsa==4.9 ; python_version >= "3.10" and python_version < "4" \ + --hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 \ + --hash=sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21 +s3transfer==0.7.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:10d6923c6359175f264811ef4bf6161a3156ce8e350e705396a7557d6293c33a \ + --hash=sha256:fd3889a66f5fe17299fe75b82eae6cf722554edca744ca5d5fe308b104883d2e +secretstorage==3.3.3 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "linux" \ + --hash=sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77 \ + --hash=sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99 +setuptools==68.2.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87 \ + --hash=sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a +six==1.16.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 +sniffio==1.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101 \ + --hash=sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384 +sshpubkeys==3.3.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:3020ed4f8c846849299370fbe98ff4157b0ccc1accec105e07cfa9ae4bb55064 \ + --hash=sha256:946f76b8fe86704b0e7c56a00d80294e39bc2305999844f079a217885060b1ac +starlette==0.27.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75 \ + --hash=sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91 +tabulate==0.9.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c \ + --hash=sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f +typing-extensions==4.8.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \ + --hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef +tzdata==2023.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a \ + --hash=sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda +ujson==5.8.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c \ + --hash=sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7 \ + --hash=sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903 \ + --hash=sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c \ + --hash=sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5 \ + --hash=sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296 \ + --hash=sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f \ + --hash=sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3 \ + --hash=sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4 \ + --hash=sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207 \ + --hash=sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6 \ + --hash=sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb \ + --hash=sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e \ + --hash=sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130 \ + --hash=sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721 \ + --hash=sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0 \ + --hash=sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3 \ + --hash=sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc \ + --hash=sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a \ + --hash=sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916 \ + --hash=sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8 \ + --hash=sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6 \ + --hash=sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405 \ + --hash=sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c \ + --hash=sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042 \ + --hash=sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7 \ + --hash=sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425 \ + --hash=sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3 \ + --hash=sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30 \ + --hash=sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282 \ + --hash=sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a \ + --hash=sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a \ + --hash=sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75 \ + --hash=sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07 \ + --hash=sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08 \ + --hash=sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582 \ + --hash=sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9 \ + --hash=sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c \ + --hash=sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba \ + --hash=sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879 \ + --hash=sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94 \ + --hash=sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b \ + --hash=sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67 \ + --hash=sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f \ + --hash=sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2 \ + --hash=sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564 \ + --hash=sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76 \ + --hash=sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109 \ + --hash=sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7 \ + --hash=sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377 \ + --hash=sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5 \ + --hash=sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa \ + --hash=sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b \ + --hash=sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83 \ + --hash=sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec \ + --hash=sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf \ + --hash=sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae \ + --hash=sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95 \ + --hash=sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1 \ + --hash=sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f \ + --hash=sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c +uritemplate==4.1.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0 \ + --hash=sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e +urllib3==1.26.17 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:24d6a242c28d29af46c3fae832c36db3bbebcc533dd1bb549172cd739c82df21 \ + --hash=sha256:94a757d178c9be92ef5539b8840d48dc9cf1b2709c9d6b588232a055c524458b +uvicorn[standard]==0.23.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1f9be6558f01239d4fdf22ef8126c39cb1ad0addf76c40e760549d2c2f43ab53 \ + --hash=sha256:4d3cc12d7727ba72b64d12d3cc7743124074c0a69f7b201512fc50c3e3f1569a +uvloop==0.17.0 ; (sys_platform != "win32" and sys_platform != "cygwin") and platform_python_implementation != "PyPy" and python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0949caf774b9fcefc7c5756bacbbbd3fc4c05a6b7eebc7c7ad6f825b23998d6d \ + --hash=sha256:0ddf6baf9cf11a1a22c71487f39f15b2cf78eb5bde7e5b45fbb99e8a9d91b9e1 \ + --hash=sha256:1436c8673c1563422213ac6907789ecb2b070f5939b9cbff9ef7113f2b531595 \ + --hash=sha256:23609ca361a7fc587031429fa25ad2ed7242941adec948f9d10c045bfecab06b \ + --hash=sha256:2a6149e1defac0faf505406259561bc14b034cdf1d4711a3ddcdfbaa8d825a05 \ + --hash=sha256:2deae0b0fb00a6af41fe60a675cec079615b01d68beb4cc7b722424406b126a8 \ + --hash=sha256:307958f9fc5c8bb01fad752d1345168c0abc5d62c1b72a4a8c6c06f042b45b20 \ + --hash=sha256:30babd84706115626ea78ea5dbc7dd8d0d01a2e9f9b306d24ca4ed5796c66ded \ + --hash=sha256:3378eb62c63bf336ae2070599e49089005771cc651c8769aaad72d1bd9385a7c \ + --hash=sha256:3d97672dc709fa4447ab83276f344a165075fd9f366a97b712bdd3fee05efae8 \ + --hash=sha256:3db8de10ed684995a7f34a001f15b374c230f7655ae840964d51496e2f8a8474 \ + --hash=sha256:3ebeeec6a6641d0adb2ea71dcfb76017602ee2bfd8213e3fcc18d8f699c5104f \ + --hash=sha256:45cea33b208971e87a31c17622e4b440cac231766ec11e5d22c76fab3bf9df62 \ + --hash=sha256:6708f30db9117f115eadc4f125c2a10c1a50d711461699a0cbfaa45b9a78e376 \ + --hash=sha256:68532f4349fd3900b839f588972b3392ee56042e440dd5873dfbbcd2cc67617c \ + --hash=sha256:6aafa5a78b9e62493539456f8b646f85abc7093dd997f4976bb105537cf2635e \ + --hash=sha256:7d37dccc7ae63e61f7b96ee2e19c40f153ba6ce730d8ba4d3b4e9738c1dccc1b \ + --hash=sha256:864e1197139d651a76c81757db5eb199db8866e13acb0dfe96e6fc5d1cf45fc4 \ + --hash=sha256:8887d675a64cfc59f4ecd34382e5b4f0ef4ae1da37ed665adba0c2badf0d6578 \ + --hash=sha256:8efcadc5a0003d3a6e887ccc1fb44dec25594f117a94e3127954c05cf144d811 \ + --hash=sha256:9b09e0f0ac29eee0451d71798878eae5a4e6a91aa275e114037b27f7db72702d \ + --hash=sha256:a4aee22ece20958888eedbad20e4dbb03c37533e010fb824161b4f05e641f738 \ + --hash=sha256:a5abddb3558d3f0a78949c750644a67be31e47936042d4f6c888dd6f3c95f4aa \ + --hash=sha256:c092a2c1e736086d59ac8e41f9c98f26bbf9b9222a76f21af9dfe949b99b2eb9 \ + --hash=sha256:c686a47d57ca910a2572fddfe9912819880b8765e2f01dc0dd12a9bf8573e539 \ + --hash=sha256:cbbe908fda687e39afd6ea2a2f14c2c3e43f2ca88e3a11964b297822358d0e6c \ + --hash=sha256:ce9f61938d7155f79d3cb2ffa663147d4a76d16e08f65e2c66b77bd41b356718 \ + --hash=sha256:dbbaf9da2ee98ee2531e0c780455f2841e4675ff580ecf93fe5c48fe733b5667 \ + --hash=sha256:f1e507c9ee39c61bfddd79714e4f85900656db1aec4d40c6de55648e85c2799c \ + --hash=sha256:ff3d00b70ce95adce264462c930fbaecb29718ba6563db354608f37e49e09024 +vine==5.0.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4c9dceab6f76ed92105027c49c823800dd33cacce13bdedc5b914e3514b7fb30 \ + --hash=sha256:7d3b1624a953da82ef63462013bbd271d3eb75751489f9807598e8f340bd637e +watchfiles==0.20.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:007dcc4a401093010b389c044e81172c8a2520dba257c88f8828b3d460c6bb38 \ + --hash=sha256:08dc702529bb06a2b23859110c214db245455532da5eaea602921687cfcd23db \ + --hash=sha256:0d82dbc1832da83e441d112069833eedd4cf583d983fb8dd666fbefbea9d99c0 \ + --hash=sha256:13f995d5152a8ba4ed7c2bbbaeee4e11a5944defc7cacd0ccb4dcbdcfd78029a \ + --hash=sha256:3796312bd3587e14926013612b23066912cf45a14af71cf2b20db1c12dadf4e9 \ + --hash=sha256:5392dd327a05f538c56edb1c6ebba6af91afc81b40822452342f6da54907bbdf \ + --hash=sha256:570848706440373b4cd8017f3e850ae17f76dbdf1e9045fc79023b11e1afe490 \ + --hash=sha256:608cd94a8767f49521901aff9ae0c92cc8f5a24d528db7d6b0295290f9d41193 \ + --hash=sha256:728575b6b94c90dd531514677201e8851708e6e4b5fe7028ac506a200b622019 \ + --hash=sha256:7d4e66a857621584869cfbad87039e65dadd7119f0d9bb9dbc957e089e32c164 \ + --hash=sha256:835df2da7a5df5464c4a23b2d963e1a9d35afa422c83bf4ff4380b3114603644 \ + --hash=sha256:87d9e1f75c4f86c93d73b5bd1ebe667558357548f11b4f8af4e0e272f79413ce \ + --hash=sha256:89d1de8218874925bce7bb2ae9657efc504411528930d7a83f98b1749864f2ef \ + --hash=sha256:99f4c65fd2fce61a571b2a6fcf747d6868db0bef8a934e8ca235cc8533944d95 \ + --hash=sha256:9a0351d20d03c6f7ad6b2e8a226a5efafb924c7755ee1e34f04c77c3682417fa \ + --hash=sha256:9b5c8d3be7b502f8c43a33c63166ada8828dbb0c6d49c8f9ce990a96de2f5a49 \ + --hash=sha256:a03d1e6feb7966b417f43c3e3783188167fd69c2063e86bad31e62c4ea794cc5 \ + --hash=sha256:b17d4176c49d207865630da5b59a91779468dd3e08692fe943064da260de2c7c \ + --hash=sha256:d0002d81c89a662b595645fb684a371b98ff90a9c7d8f8630c82f0fde8310458 \ + --hash=sha256:d97db179f7566dcf145c5179ddb2ae2a4450e3a634eb864b09ea04e68c252e8e \ + --hash=sha256:e43af4464daa08723c04b43cf978ab86cc55c684c16172622bdac64b34e36af0 \ + --hash=sha256:eccc8942bcdc7d638a01435d915b913255bbd66f018f1af051cd8afddb339ea3 +wcwidth==0.2.8 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:77f719e01648ed600dfa5402c347481c0992263b81a027344f3e1ba25493a704 \ + --hash=sha256:8705c569999ffbb4f6a87c6d1b80f324bd6db952f5eb0b95bc07517f4c1813d4 +websocket-client==1.6.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:3aad25d31284266bcfcfd1fd8a743f63282305a364b8d0948a43bd606acc652f \ + --hash=sha256:6cfc30d051ebabb73a5fa246efdcc14c8fbebbd0330f8984ac3bb6d9edd2ad03 +websockets==11.0.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd \ + --hash=sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f \ + --hash=sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998 \ + --hash=sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82 \ + --hash=sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788 \ + --hash=sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa \ + --hash=sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f \ + --hash=sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4 \ + --hash=sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7 \ + --hash=sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f \ + --hash=sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd \ + --hash=sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69 \ + --hash=sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb \ + --hash=sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b \ + --hash=sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016 \ + --hash=sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac \ + --hash=sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4 \ + --hash=sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb \ + --hash=sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99 \ + --hash=sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e \ + --hash=sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54 \ + --hash=sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf \ + --hash=sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007 \ + --hash=sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3 \ + --hash=sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6 \ + --hash=sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86 \ + --hash=sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1 \ + --hash=sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61 \ + --hash=sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11 \ + --hash=sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8 \ + --hash=sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f \ + --hash=sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931 \ + --hash=sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526 \ + --hash=sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016 \ + --hash=sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae \ + --hash=sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd \ + --hash=sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b \ + --hash=sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311 \ + --hash=sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af \ + --hash=sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152 \ + --hash=sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288 \ + --hash=sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de \ + --hash=sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97 \ + --hash=sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d \ + --hash=sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d \ + --hash=sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca \ + --hash=sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0 \ + --hash=sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9 \ + --hash=sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b \ + --hash=sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e \ + --hash=sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128 \ + --hash=sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d \ + --hash=sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c \ + --hash=sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5 \ + --hash=sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6 \ + --hash=sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b \ + --hash=sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b \ + --hash=sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280 \ + --hash=sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c \ + --hash=sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c \ + --hash=sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f \ + --hash=sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20 \ + --hash=sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8 \ + --hash=sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb \ + --hash=sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602 \ + --hash=sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf \ + --hash=sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0 \ + --hash=sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74 \ + --hash=sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0 \ + --hash=sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564 +xlsxwriter==3.1.6 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2087abdaa4a5e981a3ae50b5c21ff1adae59c8fecb6157808585fc169a6bfcd9 \ + --hash=sha256:fc3838232f9f50763c1e81a3b381c6ad559dcdcd0983ee239bf54556392b4f3f +yara-python==4.3.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:51f1bdbcdbcfa29a7a2cf7e7e5d6a7d8dbd00568e4ab6103adceda5a499895a6 \ + --hash=sha256:7af4354ee0f1561f51fd01771a121d8d385b93bbc6138a25a38ce68aa6801c2c \ + --hash=sha256:834d8fe2cdb5cf61d5e505d32c504b62891df5ce5af9f04dbd8c7575c1dbef30 \ + --hash=sha256:8847bb5e74d2b33cf48f372bed02805876ab2e414aa7fd50c16a7c6150316601 \ + --hash=sha256:950377dd53d17870f66406f0db9ed9f6b04ac7e61c7f6fd5429459e2a00fd874 \ + --hash=sha256:c032ad4ec6698a4f485b3d9721e6223028953bb61362482bdd7eabb147271e80 \ + --hash=sha256:c8663f75f0c5f82e0f6053c9ddbddd97f956787bffb7f64cac1e40e0a21db89c \ + --hash=sha256:ec05d0b7cc46728119d450875382d5386305510b8cfb14bad3627060c9e6f199 \ + --hash=sha256:f0b7b2ea840638415a075a25860dbcb6466d83000a8367196188a6367b01af71 \ + --hash=sha256:fbf8281a6eb538b5c219a9c54c65a910806e7adf28a7d878f2cff551cbbd43ea \ + --hash=sha256:fd70fe0ba522d4ecd73cbf45e528872844e61e2febe8f66e8a94c2674751b831 +zipp==3.17.0 ; python_version >= "3.10" and python_version < "3.12" \ + --hash=sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 \ + --hash=sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 diff --git a/requirements.txt b/requirements.txt index 102d59a9e..a8bdacfc8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,36 +1,985 @@ -celery>=5.2.2 -cryptography>=2.0.2,>3.8 -docker -fakeredis>=1.8.1 -fastapi>=0.75.0, <0.99.0 -filelock -google-api-core<2.0.0dev -google-api-python-client -google-auth<2.0.0.dev0 -google-cloud-core<2.0dev -google-cloud-datastore<=2.0.0 -google-cloud-error-reporting -google-cloud-logging>=2.0.0,<3.0.0dev -google-cloud-pubsub==1.7.0 -google-cloud-storage<=2.2.1 -httpx -pycryptodomex -prometheus_client -libcloudforensics==20230601 -pandas -protobuf>=3.19.0,<4.0.0dev -proto-plus<2.0.0dev,>=1.22.0 -psq -pydantic >= 1.10.5, < 2 -pyparsing<3 -pyyaml>=5.4.1 -pyOpenSSL>=23.2.0 -python-multipart -redis<4.2 -six>=1.15.0 -urllib3 >= 1.25.3, < 2 -uvicorn>=0.17.6 -vine>=5.0.0 -PyJWT[crypto]<2 -idna==2.10 -grpcio-status<1.49.0,>=1.33.2 +adal==1.2.7 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2a7451ed7441ddbc57703042204a3e30ef747478eea022c70f789fc7f084bc3d \ + --hash=sha256:d74f45b81317454d96e982fd1c50e6fb5c99ac2223728aea8764433a39f566f1 +amqp==5.1.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2c1b13fecc0893e946c65cbd5f36427861cffa4ea2201d8f6fca22e2a373b5e2 \ + --hash=sha256:6f0956d2c23d8fa6e7691934d8c3930eadb44972cbbd1a7ae3a520f735d43359 +anyio==4.0.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f \ + --hash=sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a +async-timeout==4.0.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f \ + --hash=sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028 +azure-common==1.1.28 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4ac0cd3214e36b6a1b6a442686722a5d8cc449603aa833f3f0f40bda836704a3 \ + --hash=sha256:5c12d3dcf4ec20599ca6b0d3e09e86e146353d443e7fcc050c9a19c1f9df20ad +azure-core==1.29.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:500b3aa9bf2e90c5ccc88bb105d056114ca0ce7d0ce73afb8bc4d714b2fc7568 \ + --hash=sha256:b03261bcba22c0b9290faf9999cedd23e849ed2577feee90515694cea6bc74bf +azure-identity==1.14.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:72441799f8c5c89bfe21026965e266672a7c5d050c2c65119ef899dd5362e2b1 \ + --hash=sha256:edabf0e010eb85760e1dd19424d5e8f97ba2c9caff73a16e7b30ccbdbcce369b +azure-mgmt-compute==23.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:49dbb0f51006d557cbd0b22999cb9ecf3eabc2be46d96efcc6d651c6b33754b3 \ + --hash=sha256:d028afc4fbbd6796b2604195ffdb1021ef77b18cf01356f810820a52a7e2a12d +azure-mgmt-core==1.4.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:81071675f186a585555ef01816f2774d49c1c9024cb76e5720c3c0f6b337bb7d \ + --hash=sha256:d195208340094f98e5a6661b781cde6f6a051e79ce317caabd8ff97030a9b3ae +azure-mgmt-monitor==6.0.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:5ffbf500e499ab7912b1ba6d26cef26480d9ae411532019bb78d72562196e07b \ + --hash=sha256:fe4cf41e6680b74a228f81451dc5522656d599c6f343ecf702fc790fda9a357b +azure-mgmt-network==25.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:94191ce8ae243ab6e9c489f21330b3908937e296d443fea4e5100d57d52e14c8 \ + --hash=sha256:f939f75bf139e03d2c457a4f07a5ebadb5affdd70aa54be9a0af44b8e52132fc +azure-mgmt-resource==23.0.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:c2ba6cfd99df95f55f36eadc4245e3dc713257302a1fd0277756d94bd8cb28e0 \ + --hash=sha256:f185eec72bbc39f42bcb83ae6f1bad744f0e3f20a12d9b2b3e70d16c74ad9cc0 +azure-mgmt-storage==21.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:593f2544fc4f05750c4fe7ca4d83c32ea1e9d266e57899bbf79ce5940124e8cc \ + --hash=sha256:d6d3c0e917c988bc9ed0472477d3ef3f90886009eb1d97a711944f8375630162 +azure-storage-blob==12.18.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:e11935348981ffc005b848b55db25c04f2d1f90e1ee33000659906b763cf14c8 \ + --hash=sha256:ffd864bf9abf33dfc72c6ef37899a19bd9d585a946a2c61e288b4420c035df3a +billiard==4.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0f50d6be051c6b2b75bfbc8bfd85af195c5739c281d3f5b86a5640c65563614a \ + --hash=sha256:1ad2eeae8e28053d729ba3373d34d9d6e210f6e4d8bf0a9c64f92bd053f1edf5 +boto3==1.28.61 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:7a539aaf00eb45aea1ae857ef5d05e67def24fc07af4cb36c202fa45f8f30590 \ + --hash=sha256:ec49986e6c9549177e351494de64886c3f9daffd1a7af9e40302208aa1ffff1c +botocore==1.31.61 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:39b059603f0e92a26599eecc7fe9b141f13eb412c964786ca3a7df5375928c87 \ + --hash=sha256:433bf93af09ad205d6db4c2ffc1f0e3193ddad4e0aced0a68ad8b0fa9de903e2 +cachetools==4.2.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:89ea6f1b638d5a73a4f9226be57ac5e4f399d22770b92355f92dcb0f7f001693 \ + --hash=sha256:92971d3cb7d2a97efff7c7bb1657f21a8f5fb309a37530537c71b1774189f2d1 +celery==5.3.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1e6ed40af72695464ce98ca2c201ad0ef8fd192246f6c9eac8bba343b980ad34 \ + --hash=sha256:9023df6a8962da79eb30c0c84d5f4863d9793a466354cc931d7f72423996de28 +certifi==2023.7.22 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ + --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 +cffi==1.16.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \ + --hash=sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a \ + --hash=sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417 \ + --hash=sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab \ + --hash=sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520 \ + --hash=sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36 \ + --hash=sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743 \ + --hash=sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8 \ + --hash=sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed \ + --hash=sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684 \ + --hash=sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56 \ + --hash=sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324 \ + --hash=sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d \ + --hash=sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235 \ + --hash=sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e \ + --hash=sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088 \ + --hash=sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000 \ + --hash=sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7 \ + --hash=sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e \ + --hash=sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673 \ + --hash=sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c \ + --hash=sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe \ + --hash=sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2 \ + --hash=sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098 \ + --hash=sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8 \ + --hash=sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a \ + --hash=sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0 \ + --hash=sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b \ + --hash=sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896 \ + --hash=sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e \ + --hash=sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9 \ + --hash=sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2 \ + --hash=sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b \ + --hash=sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6 \ + --hash=sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404 \ + --hash=sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f \ + --hash=sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0 \ + --hash=sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4 \ + --hash=sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc \ + --hash=sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936 \ + --hash=sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba \ + --hash=sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872 \ + --hash=sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb \ + --hash=sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614 \ + --hash=sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1 \ + --hash=sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d \ + --hash=sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969 \ + --hash=sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b \ + --hash=sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4 \ + --hash=sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627 \ + --hash=sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956 \ + --hash=sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357 +charset-normalizer==3.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843 \ + --hash=sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786 \ + --hash=sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e \ + --hash=sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8 \ + --hash=sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4 \ + --hash=sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa \ + --hash=sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d \ + --hash=sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82 \ + --hash=sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7 \ + --hash=sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895 \ + --hash=sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d \ + --hash=sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a \ + --hash=sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382 \ + --hash=sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678 \ + --hash=sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b \ + --hash=sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e \ + --hash=sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741 \ + --hash=sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4 \ + --hash=sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596 \ + --hash=sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9 \ + --hash=sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69 \ + --hash=sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c \ + --hash=sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77 \ + --hash=sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13 \ + --hash=sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459 \ + --hash=sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e \ + --hash=sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7 \ + --hash=sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908 \ + --hash=sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a \ + --hash=sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f \ + --hash=sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8 \ + --hash=sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482 \ + --hash=sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d \ + --hash=sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d \ + --hash=sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545 \ + --hash=sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34 \ + --hash=sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86 \ + --hash=sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6 \ + --hash=sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe \ + --hash=sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e \ + --hash=sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc \ + --hash=sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7 \ + --hash=sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd \ + --hash=sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c \ + --hash=sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557 \ + --hash=sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a \ + --hash=sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89 \ + --hash=sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078 \ + --hash=sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e \ + --hash=sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4 \ + --hash=sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403 \ + --hash=sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0 \ + --hash=sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89 \ + --hash=sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115 \ + --hash=sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9 \ + --hash=sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05 \ + --hash=sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a \ + --hash=sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec \ + --hash=sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56 \ + --hash=sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38 \ + --hash=sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479 \ + --hash=sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c \ + --hash=sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e \ + --hash=sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd \ + --hash=sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186 \ + --hash=sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455 \ + --hash=sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c \ + --hash=sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65 \ + --hash=sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78 \ + --hash=sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287 \ + --hash=sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df \ + --hash=sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43 \ + --hash=sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1 \ + --hash=sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7 \ + --hash=sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989 \ + --hash=sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a \ + --hash=sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63 \ + --hash=sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884 \ + --hash=sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649 \ + --hash=sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810 \ + --hash=sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828 \ + --hash=sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4 \ + --hash=sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2 \ + --hash=sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd \ + --hash=sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5 \ + --hash=sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe \ + --hash=sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293 \ + --hash=sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e \ + --hash=sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e \ + --hash=sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8 +click-didyoumean==0.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:a0713dc7a1de3f06bc0df5a9567ad19ead2d3d5689b434768a6145bff77c0667 \ + --hash=sha256:f184f0d851d96b6d29297354ed981b7dd71df7ff500d82fa6d11f0856bee8035 +click-plugins==1.1.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b \ + --hash=sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8 +click-repl==0.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:17849c23dba3d667247dc4defe1757fff98694e90fe37474f3feebb69ced26a9 \ + --hash=sha256:fb7e06deb8da8de86180a33a9da97ac316751c094c6899382da7feeeeb51b812 +click==8.1.7 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ + --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de +colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0" and (platform_system == "Windows" or sys_platform == "win32") \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 +cryptography==41.0.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67 \ + --hash=sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311 \ + --hash=sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8 \ + --hash=sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13 \ + --hash=sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143 \ + --hash=sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f \ + --hash=sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829 \ + --hash=sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd \ + --hash=sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397 \ + --hash=sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac \ + --hash=sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d \ + --hash=sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a \ + --hash=sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839 \ + --hash=sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e \ + --hash=sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6 \ + --hash=sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9 \ + --hash=sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860 \ + --hash=sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca \ + --hash=sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91 \ + --hash=sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d \ + --hash=sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714 \ + --hash=sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb \ + --hash=sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f +dnspython==2.4.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:57c6fbaaeaaf39c891292012060beb141791735dbb4004798328fc2c467402d8 \ + --hash=sha256:8dcfae8c7460a2f84b4072e26f1c9f4101ca20c071649cb7c34e8b6a93d58984 +docker==6.1.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20 \ + --hash=sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9 +ecdsa==0.18.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49 \ + --hash=sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd +email-validator==2.0.0.post2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1ff6e86044200c56ae23595695c54e9614f4a9551e0e393614f764860b3d7900 \ + --hash=sha256:2466ba57cda361fb7309fd3d5a225723c788ca4bbad32a0ebd5373b99730285c +exceptiongroup==1.1.3 ; python_version >= "3.10" and python_version < "3.11" \ + --hash=sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9 \ + --hash=sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3 +fastapi[all]==0.98.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0d3c18886f652038262b5898fec6b09f4ca92ee23e9d9b1d1d24e429f84bf27b \ + --hash=sha256:f4165fb1fe3610c52cb1b8282c1480de9c34bc270f56a965aa93a884c350d605 +filelock==3.12.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4 \ + --hash=sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd +google-api-core==1.34.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:6fb380f49d19ee1d09a9722d0379042b7edb06c0112e4796c7a395078a043e71 \ + --hash=sha256:7421474c39d396a74dfa317dddbc69188f2336835f526087c7648f91105e32ff +google-api-python-client==2.102.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:906ff9b672a4d5ddad8f4073a040e59f1fba6734909c14cd49938e37be53691d \ + --hash=sha256:ce2fb4d80eb24519ced44a1e79030866cc8a6379ed5ba6c76ba46e772cc68137 +google-auth-httplib2==0.1.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:42c50900b8e4dcdf8222364d1f0efe32b8421fb6ed72f2613f12f75cc933478c \ + --hash=sha256:c64bc555fdc6dd788ea62ecf7bccffcf497bf77244887a3f3d7a5a02f8e3fc29 +google-auth==1.35.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:997516b42ecb5b63e8d80f5632c1a61dddf41d2a4c2748057837e06e00014258 \ + --hash=sha256:b7033be9028c188ee30200b204ea00ed82ea1162e8ac1df4aa6ded19a191d88e +googleapis-common-protos==1.60.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:69f9bbcc6acde92cab2db95ce30a70bd2b81d20b12eff3f1aabaffcbe8a93918 \ + --hash=sha256:e73ebb404098db405ba95d1e1ae0aa91c3e15a71da031a2eeb6b2e23e7bc3708 +h11==0.14.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ + --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 +httpcore==0.18.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:13b5e5cd1dca1a6636a6aaea212b19f4f85cd88c366a2b82304181b769aab3c9 \ + --hash=sha256:adc5398ee0a476567bf87467063ee63584a8bce86078bf748e48754f60202ced +httplib2==0.22.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc \ + --hash=sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81 +httptools==0.6.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:03bfd2ae8a2d532952ac54445a2fb2504c804135ed28b53fefaf03d3a93eb1fd \ + --hash=sha256:0781fedc610293a2716bc7fa142d4c85e6776bc59d617a807ff91246a95dea35 \ + --hash=sha256:0d0b0571806a5168013b8c3d180d9f9d6997365a4212cb18ea20df18b938aa0b \ + --hash=sha256:0fb4a608c631f7dcbdf986f40af7a030521a10ba6bc3d36b28c1dc9e9035a3c0 \ + --hash=sha256:22c01fcd53648162730a71c42842f73b50f989daae36534c818b3f5050b54589 \ + --hash=sha256:23b09537086a5a611fad5696fc8963d67c7e7f98cb329d38ee114d588b0b74cd \ + --hash=sha256:259920bbae18740a40236807915def554132ad70af5067e562f4660b62c59b90 \ + --hash=sha256:26326e0a8fe56829f3af483200d914a7cd16d8d398d14e36888b56de30bec81a \ + --hash=sha256:274bf20eeb41b0956e34f6a81f84d26ed57c84dd9253f13dcb7174b27ccd8aaf \ + --hash=sha256:33eb1d4e609c835966e969a31b1dedf5ba16b38cab356c2ce4f3e33ffa94cad3 \ + --hash=sha256:35a541579bed0270d1ac10245a3e71e5beeb1903b5fbbc8d8b4d4e728d48ff1d \ + --hash=sha256:38f3cafedd6aa20ae05f81f2e616ea6f92116c8a0f8dcb79dc798df3356836e2 \ + --hash=sha256:3f96d2a351b5625a9fd9133c95744e8ca06f7a4f8f0b8231e4bbaae2c485046a \ + --hash=sha256:463c3bc5ef64b9cf091be9ac0e0556199503f6e80456b790a917774a616aff6e \ + --hash=sha256:47043a6e0ea753f006a9d0dd076a8f8c99bc0ecae86a0888448eb3076c43d717 \ + --hash=sha256:4e748fc0d5c4a629988ef50ac1aef99dfb5e8996583a73a717fc2cac4ab89932 \ + --hash=sha256:5dcc14c090ab57b35908d4a4585ec5c0715439df07be2913405991dbb37e049d \ + --hash=sha256:65d802e7b2538a9756df5acc062300c160907b02e15ed15ba035b02bce43e89c \ + --hash=sha256:6bdc6675ec6cb79d27e0575750ac6e2b47032742e24eed011b8db73f2da9ed40 \ + --hash=sha256:6e22896b42b95b3237eccc42278cd72c0df6f23247d886b7ded3163452481e38 \ + --hash=sha256:721e503245d591527cddd0f6fd771d156c509e831caa7a57929b55ac91ee2b51 \ + --hash=sha256:72205730bf1be875003692ca54a4a7c35fac77b4746008966061d9d41a61b0f5 \ + --hash=sha256:72ec7c70bd9f95ef1083d14a755f321d181f046ca685b6358676737a5fecd26a \ + --hash=sha256:73e9d66a5a28b2d5d9fbd9e197a31edd02be310186db423b28e6052472dc8201 \ + --hash=sha256:818325afee467d483bfab1647a72054246d29f9053fd17cc4b86cda09cc60339 \ + --hash=sha256:82c723ed5982f8ead00f8e7605c53e55ffe47c47465d878305ebe0082b6a1755 \ + --hash=sha256:82f228b88b0e8c6099a9c4757ce9fdbb8b45548074f8d0b1f0fc071e35655d1c \ + --hash=sha256:93f89975465133619aea8b1952bc6fa0e6bad22a447c6d982fc338fbb4c89649 \ + --hash=sha256:9fc6e409ad38cbd68b177cd5158fc4042c796b82ca88d99ec78f07bed6c6b796 \ + --hash=sha256:b0a816bb425c116a160fbc6f34cece097fd22ece15059d68932af686520966bd \ + --hash=sha256:b703d15dbe082cc23266bf5d9448e764c7cb3fcfe7cb358d79d3fd8248673ef9 \ + --hash=sha256:cf8169e839a0d740f3d3c9c4fa630ac1a5aaf81641a34575ca6773ed7ce041a1 \ + --hash=sha256:dea66d94e5a3f68c5e9d86e0894653b87d952e624845e0b0e3ad1c733c6cc75d \ + --hash=sha256:e41ccac9e77cd045f3e4ee0fc62cbf3d54d7d4b375431eb855561f26ee7a9ec4 \ + --hash=sha256:f959e4770b3fc8ee4dbc3578fd910fab9003e093f20ac8c621452c4d62e517cb +httpx==0.25.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:181ea7f8ba3a82578be86ef4171554dd45fec26a02556a744db029a0a27b7100 \ + --hash=sha256:47ecda285389cb32bb2691cc6e069e3ab0205956f681c5b2ad2325719751d875 +idna==3.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 +isodate==0.6.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96 \ + --hash=sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9 +itsdangerous==2.1.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44 \ + --hash=sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a +jinja2==3.1.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ + --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 +jmespath==1.0.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980 \ + --hash=sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe +kombu==5.3.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0ba213f630a2cb2772728aef56ac6883dc3a2f13435e10048f6e97d48506dbbd \ + --hash=sha256:b753c9cfc9b1e976e637a7cbc1a65d446a22e45546cd996ea28f932082b7dc9e +kubernetes==28.1.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:10f56f8160dcb73647f15fafda268e7f60cf7dbc9f8e46d52fcd46d3beb0c18d \ + --hash=sha256:1468069a573430fb1cb5ad22876868f57977930f80a6749405da31cd6086a7e9 +libcloudforensics==20230601 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2a6dc01767ce52d341f41759b4d3455d8741bca5afa2535e7a10c561a167a23c \ + --hash=sha256:66bbac27fed58255f3b593695db2b140769c2e2845c359b1d7c02f8fd82be475 +markupsafe==2.1.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ + --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ + --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ + --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ + --hash=sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c \ + --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ + --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ + --hash=sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb \ + --hash=sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939 \ + --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ + --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ + --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ + --hash=sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9 \ + --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ + --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ + --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ + --hash=sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd \ + --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ + --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ + --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ + --hash=sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac \ + --hash=sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52 \ + --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ + --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ + --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ + --hash=sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007 \ + --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ + --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ + --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ + --hash=sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0 \ + --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ + --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ + --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ + --hash=sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1 \ + --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ + --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ + --hash=sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c \ + --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ + --hash=sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823 \ + --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ + --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ + --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ + --hash=sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad \ + --hash=sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee \ + --hash=sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc \ + --hash=sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 \ + --hash=sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48 \ + --hash=sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7 \ + --hash=sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e \ + --hash=sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b \ + --hash=sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa \ + --hash=sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5 \ + --hash=sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e \ + --hash=sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb \ + --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ + --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ + --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ + --hash=sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc \ + --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \ + --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11 +msal-extensions==1.0.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:91e3db9620b822d0ed2b4d1850056a0f133cba04455e62f11612e40f5502f2ee \ + --hash=sha256:c676aba56b0cce3783de1b5c5ecfe828db998167875126ca4b47dc6436451354 +msal==1.24.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:aa0972884b3c6fdec53d9a0bd15c12e5bd7b71ac1b66d746f54d128709f3f8f8 \ + --hash=sha256:ce4320688f95c301ee74a4d0e9dbcfe029a63663a8cc61756f40d0d0d36574ad +msrest==0.7.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:21120a810e1233e5e6cc7fe40b474eeb4ec6f757a15d7cf86702c369f9567c32 \ + --hash=sha256:6e7661f46f3afd88b75667b7187a92829924446c7ea1d169be8c4bb7eeb788b9 +msrestazure==0.6.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:3de50f56147ef529b31e099a982496690468ecef33f0544cb0fa0cfe1e1de5b9 \ + --hash=sha256:a06f0dabc9a6f5efe3b6add4bd8fb623aeadacf816b7a35b0f89107e0544d189 +netaddr==0.9.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:5148b1055679d2a1ec070c521b7db82137887fabd6d7e37f5199b44f775c3bb1 \ + --hash=sha256:7b46fa9b1a2d71fd5de9e4a3784ef339700a53a08c8040f08baf5f1194da0128 +numpy==1.26.0 ; python_version >= "3.10" and python_version <= "3.11" \ + --hash=sha256:020cdbee66ed46b671429c7265cf00d8ac91c046901c55684954c3958525dab2 \ + --hash=sha256:0621f7daf973d34d18b4e4bafb210bbaf1ef5e0100b5fa750bd9cde84c7ac292 \ + --hash=sha256:0792824ce2f7ea0c82ed2e4fecc29bb86bee0567a080dacaf2e0a01fe7654369 \ + --hash=sha256:09aaee96c2cbdea95de76ecb8a586cb687d281c881f5f17bfc0fb7f5890f6b91 \ + --hash=sha256:166b36197e9debc4e384e9c652ba60c0bacc216d0fc89e78f973a9760b503388 \ + --hash=sha256:186ba67fad3c60dbe8a3abff3b67a91351100f2661c8e2a80364ae6279720299 \ + --hash=sha256:306545e234503a24fe9ae95ebf84d25cba1fdc27db971aa2d9f1ab6bba19a9dd \ + --hash=sha256:436c8e9a4bdeeee84e3e59614d38c3dbd3235838a877af8c211cfcac8a80b8d3 \ + --hash=sha256:4a873a8180479bc829313e8d9798d5234dfacfc2e8a7ac188418189bb8eafbd2 \ + --hash=sha256:4acc65dd65da28060e206c8f27a573455ed724e6179941edb19f97e58161bb69 \ + --hash=sha256:51be5f8c349fdd1a5568e72713a21f518e7d6707bcf8503b528b88d33b57dc68 \ + --hash=sha256:546b7dd7e22f3c6861463bebb000646fa730e55df5ee4a0224408b5694cc6148 \ + --hash=sha256:5671338034b820c8d58c81ad1dafc0ed5a00771a82fccc71d6438df00302094b \ + --hash=sha256:637c58b468a69869258b8ae26f4a4c6ff8abffd4a8334c830ffb63e0feefe99a \ + --hash=sha256:767254ad364991ccfc4d81b8152912e53e103ec192d1bb4ea6b1f5a7117040be \ + --hash=sha256:7d484292eaeb3e84a51432a94f53578689ffdea3f90e10c8b203a99be5af57d8 \ + --hash=sha256:7f6bad22a791226d0a5c7c27a80a20e11cfe09ad5ef9084d4d3fc4a299cca505 \ + --hash=sha256:86f737708b366c36b76e953c46ba5827d8c27b7a8c9d0f471810728e5a2fe57c \ + --hash=sha256:8c6adc33561bd1d46f81131d5352348350fc23df4d742bb246cdfca606ea1208 \ + --hash=sha256:914b28d3215e0c721dc75db3ad6d62f51f630cb0c277e6b3bcb39519bed10bd8 \ + --hash=sha256:b44e6a09afc12952a7d2a58ca0a2429ee0d49a4f89d83a0a11052da696440e49 \ + --hash=sha256:bb0d9a1aaf5f1cb7967320e80690a1d7ff69f1d47ebc5a9bea013e3a21faec95 \ + --hash=sha256:c0b45c8b65b79337dee5134d038346d30e109e9e2e9d43464a2970e5c0e93229 \ + --hash=sha256:c2e698cb0c6dda9372ea98a0344245ee65bdc1c9dd939cceed6bb91256837896 \ + --hash=sha256:c78a22e95182fb2e7874712433eaa610478a3caf86f28c621708d35fa4fd6e7f \ + --hash=sha256:e062aa24638bb5018b7841977c360d2f5917268d125c833a686b7cbabbec496c \ + --hash=sha256:e5e18e5b14a7560d8acf1c596688f4dfd19b4f2945b245a71e5af4ddb7422feb \ + --hash=sha256:eae430ecf5794cb7ae7fa3808740b015aa80747e5266153128ef055975a72b99 \ + --hash=sha256:ee84ca3c58fe48b8ddafdeb1db87388dce2c3c3f701bf447b05e4cfcc3679112 \ + --hash=sha256:f042f66d0b4ae6d48e70e28d487376204d3cbf43b84c03bac57e28dac6151581 \ + --hash=sha256:f8db2f125746e44dce707dd44d4f4efeea8d7e2b43aace3f8d1f235cfa2733dd \ + --hash=sha256:f93fc78fe8bf15afe2b8d6b6499f1c73953169fad1e9a8dd086cdff3190e7fdf +oauthlib==3.2.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca \ + --hash=sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918 +orjson==3.9.7 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:01d647b2a9c45a23a84c3e70e19d120011cba5f56131d185c1b78685457320bb \ + --hash=sha256:0eb850a87e900a9c484150c414e21af53a6125a13f6e378cf4cc11ae86c8f9c5 \ + --hash=sha256:11c10f31f2c2056585f89d8229a56013bc2fe5de51e095ebc71868d070a8dd81 \ + --hash=sha256:14d3fb6cd1040a4a4a530b28e8085131ed94ebc90d72793c59a713de34b60838 \ + --hash=sha256:154fd67216c2ca38a2edb4089584504fbb6c0694b518b9020ad35ecc97252bb9 \ + --hash=sha256:1c3cee5c23979deb8d1b82dc4cc49be59cccc0547999dbe9adb434bb7af11cf7 \ + --hash=sha256:1eb0b0b2476f357eb2975ff040ef23978137aa674cd86204cfd15d2d17318588 \ + --hash=sha256:1f8b47650f90e298b78ecf4df003f66f54acdba6a0f763cc4df1eab048fe3738 \ + --hash=sha256:21a3344163be3b2c7e22cef14fa5abe957a892b2ea0525ee86ad8186921b6cf0 \ + --hash=sha256:23be6b22aab83f440b62a6f5975bcabeecb672bc627face6a83bc7aeb495dc7e \ + --hash=sha256:26ffb398de58247ff7bde895fe30817a036f967b0ad0e1cf2b54bda5f8dcfdd9 \ + --hash=sha256:2f8fcf696bbbc584c0c7ed4adb92fd2ad7d153a50258842787bc1524e50d7081 \ + --hash=sha256:355efdbbf0cecc3bd9b12589b8f8e9f03c813a115efa53f8dc2a523bfdb01334 \ + --hash=sha256:36b1df2e4095368ee388190687cb1b8557c67bc38400a942a1a77713580b50ae \ + --hash=sha256:38e34c3a21ed41a7dbd5349e24c3725be5416641fdeedf8f56fcbab6d981c900 \ + --hash=sha256:3aab72d2cef7f1dd6104c89b0b4d6b416b0db5ca87cc2fac5f79c5601f549cc2 \ + --hash=sha256:410aa9d34ad1089898f3db461b7b744d0efcf9252a9415bbdf23540d4f67589f \ + --hash=sha256:45a47f41b6c3beeb31ac5cf0ff7524987cfcce0a10c43156eb3ee8d92d92bf22 \ + --hash=sha256:4891d4c934f88b6c29b56395dfc7014ebf7e10b9e22ffd9877784e16c6b2064f \ + --hash=sha256:4c616b796358a70b1f675a24628e4823b67d9e376df2703e893da58247458956 \ + --hash=sha256:5198633137780d78b86bb54dafaaa9baea698b4f059456cd4554ab7009619221 \ + --hash=sha256:5a2937f528c84e64be20cb80e70cea76a6dfb74b628a04dab130679d4454395c \ + --hash=sha256:5da9032dac184b2ae2da4bce423edff7db34bfd936ebd7d4207ea45840f03905 \ + --hash=sha256:5e736815b30f7e3c9044ec06a98ee59e217a833227e10eb157f44071faddd7c5 \ + --hash=sha256:63ef3d371ea0b7239ace284cab9cd00d9c92b73119a7c274b437adb09bda35e6 \ + --hash=sha256:70b9a20a03576c6b7022926f614ac5a6b0914486825eac89196adf3267c6489d \ + --hash=sha256:76a0fc023910d8a8ab64daed8d31d608446d2d77c6474b616b34537aa7b79c7f \ + --hash=sha256:7951af8f2998045c656ba8062e8edf5e83fd82b912534ab1de1345de08a41d2b \ + --hash=sha256:7a34a199d89d82d1897fd4a47820eb50947eec9cda5fd73f4578ff692a912f89 \ + --hash=sha256:7bab596678d29ad969a524823c4e828929a90c09e91cc438e0ad79b37ce41166 \ + --hash=sha256:7ea3e63e61b4b0beeb08508458bdff2daca7a321468d3c4b320a758a2f554d31 \ + --hash=sha256:80acafe396ab689a326ab0d80f8cc61dec0dd2c5dca5b4b3825e7b1e0132c101 \ + --hash=sha256:82720ab0cf5bb436bbd97a319ac529aee06077ff7e61cab57cee04a596c4f9b4 \ + --hash=sha256:83cc275cf6dcb1a248e1876cdefd3f9b5f01063854acdfd687ec360cd3c9712a \ + --hash=sha256:85e39198f78e2f7e054d296395f6c96f5e02892337746ef5b6a1bf3ed5910142 \ + --hash=sha256:8769806ea0b45d7bf75cad253fba9ac6700b7050ebb19337ff6b4e9060f963fa \ + --hash=sha256:8bdb6c911dae5fbf110fe4f5cba578437526334df381b3554b6ab7f626e5eeca \ + --hash=sha256:8f4b0042d8388ac85b8330b65406c84c3229420a05068445c13ca28cc222f1f7 \ + --hash=sha256:90fe73a1f0321265126cbba13677dcceb367d926c7a65807bd80916af4c17047 \ + --hash=sha256:915e22c93e7b7b636240c5a79da5f6e4e84988d699656c8e27f2ac4c95b8dcc0 \ + --hash=sha256:9274ba499e7dfb8a651ee876d80386b481336d3868cba29af839370514e4dce0 \ + --hash=sha256:9d62c583b5110e6a5cf5169ab616aa4ec71f2c0c30f833306f9e378cf51b6c86 \ + --hash=sha256:9ef82157bbcecd75d6296d5d8b2d792242afcd064eb1ac573f8847b52e58f677 \ + --hash=sha256:a19e4074bc98793458b4b3ba35a9a1d132179345e60e152a1bb48c538ab863c4 \ + --hash=sha256:a347d7b43cb609e780ff8d7b3107d4bcb5b6fd09c2702aa7bdf52f15ed09fa09 \ + --hash=sha256:b4fb306c96e04c5863d52ba8d65137917a3d999059c11e659eba7b75a69167bd \ + --hash=sha256:b6df858e37c321cefbf27fe7ece30a950bcc3a75618a804a0dcef7ed9dd9c92d \ + --hash=sha256:b8e59650292aa3a8ea78073fc84184538783966528e442a1b9ed653aa282edcf \ + --hash=sha256:bcb9a60ed2101af2af450318cd89c6b8313e9f8df4e8fb12b657b2e97227cf08 \ + --hash=sha256:c3ba725cf5cf87d2d2d988d39c6a2a8b6fc983d78ff71bc728b0be54c869c884 \ + --hash=sha256:ca1706e8b8b565e934c142db6a9592e6401dc430e4b067a97781a997070c5378 \ + --hash=sha256:cd3e7aae977c723cc1dbb82f97babdb5e5fbce109630fbabb2ea5053523c89d3 \ + --hash=sha256:cf334ce1d2fadd1bf3e5e9bf15e58e0c42b26eb6590875ce65bd877d917a58aa \ + --hash=sha256:d8692948cada6ee21f33db5e23460f71c8010d6dfcfe293c9b96737600a7df78 \ + --hash=sha256:e5205ec0dfab1887dd383597012199f5175035e782cdb013c542187d280ca443 \ + --hash=sha256:e7e7f44e091b93eb39db88bb0cb765db09b7a7f64aea2f35e7d86cbf47046c65 \ + --hash=sha256:e94b7b31aa0d65f5b7c72dd8f8227dbd3e30354b99e7a9af096d967a77f2a580 \ + --hash=sha256:f26fb3e8e3e2ee405c947ff44a3e384e8fa1843bc35830fe6f3d9a95a1147b6e \ + --hash=sha256:f738fee63eb263530efd4d2e9c76316c1f47b3bbf38c1bf45ae9625feed0395e \ + --hash=sha256:f9e01239abea2f52a429fe9d95c96df95f078f0172489d691b4a848ace54a476 +packaging==23.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ + --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 +pandas==2.1.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:02304e11582c5d090e5a52aec726f31fe3f42895d6bfc1f28738f9b64b6f0614 \ + --hash=sha256:0489b0e6aa3d907e909aef92975edae89b1ee1654db5eafb9be633b0124abe97 \ + --hash=sha256:05674536bd477af36aa2effd4ec8f71b92234ce0cc174de34fd21e2ee99adbc2 \ + --hash=sha256:25e8474a8eb258e391e30c288eecec565bfed3e026f312b0cbd709a63906b6f8 \ + --hash=sha256:29deb61de5a8a93bdd033df328441a79fcf8dd3c12d5ed0b41a395eef9cd76f0 \ + --hash=sha256:366da7b0e540d1b908886d4feb3d951f2f1e572e655c1160f5fde28ad4abb750 \ + --hash=sha256:3bcad1e6fb34b727b016775bea407311f7721db87e5b409e6542f4546a4951ea \ + --hash=sha256:4c3f32fd7c4dccd035f71734df39231ac1a6ff95e8bdab8d891167197b7018d2 \ + --hash=sha256:4cdb0fab0400c2cb46dafcf1a0fe084c8bb2480a1fa8d81e19d15e12e6d4ded2 \ + --hash=sha256:4f99bebf19b7e03cf80a4e770a3e65eee9dd4e2679039f542d7c1ace7b7b1daa \ + --hash=sha256:58d997dbee0d4b64f3cb881a24f918b5f25dd64ddf31f467bb9b67ae4c63a1e4 \ + --hash=sha256:75ce97667d06d69396d72be074f0556698c7f662029322027c226fd7a26965cb \ + --hash=sha256:84e7e910096416adec68075dc87b986ff202920fb8704e6d9c8c9897fe7332d6 \ + --hash=sha256:9e2959720b70e106bb1d8b6eadd8ecd7c8e99ccdbe03ee03260877184bb2877d \ + --hash=sha256:9e50e72b667415a816ac27dfcfe686dc5a0b02202e06196b943d54c4f9c7693e \ + --hash=sha256:a0dbfea0dd3901ad4ce2306575c54348d98499c95be01b8d885a2737fe4d7a98 \ + --hash=sha256:b407381258a667df49d58a1b637be33e514b07f9285feb27769cedb3ab3d0b3a \ + --hash=sha256:b8bd1685556f3374520466998929bade3076aeae77c3e67ada5ed2b90b4de7f0 \ + --hash=sha256:c1f84c144dee086fe4f04a472b5cd51e680f061adf75c1ae4fc3a9275560f8f4 \ + --hash=sha256:c747793c4e9dcece7bb20156179529898abf505fe32cb40c4052107a3c620b49 \ + --hash=sha256:cc1ab6a25da197f03ebe6d8fa17273126120874386b4ac11c1d687df288542dd \ + --hash=sha256:dc3657869c7902810f32bd072f0740487f9e030c1a3ab03e0af093db35a9d14e \ + --hash=sha256:f5ec7740f9ccb90aec64edd71434711f58ee0ea7f5ed4ac48be11cfa9abf7317 \ + --hash=sha256:fecb198dc389429be557cde50a2d46da8434a17fe37d7d41ff102e3987fd947b \ + --hash=sha256:ffa8f0966de2c22de408d0e322db2faed6f6e74265aa0856f3824813cf124363 +portalocker==2.8.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2b035aa7828e46c58e9b31390ee1f169b98e1066ab10b9a6a861fe7e25ee4f33 \ + --hash=sha256:cfb86acc09b9aa7c3b43594e19be1345b9d16af3feb08bf92f23d4dce513a28e +prometheus-client==0.17.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091 \ + --hash=sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101 +prompt-toolkit==3.0.39 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac \ + --hash=sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88 +protobuf==3.20.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7 \ + --hash=sha256:28545383d61f55b57cf4df63eebd9827754fd2dc25f80c5253f9184235db242c \ + --hash=sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2 \ + --hash=sha256:398a9e0c3eaceb34ec1aee71894ca3299605fa8e761544934378bbc6c97de23b \ + --hash=sha256:44246bab5dd4b7fbd3c0c80b6f16686808fab0e4aca819ade6e8d294a29c7050 \ + --hash=sha256:447d43819997825d4e71bf5769d869b968ce96848b6479397e29fc24c4a5dfe9 \ + --hash=sha256:67a3598f0a2dcbc58d02dd1928544e7d88f764b47d4a286202913f0b2801c2e7 \ + --hash=sha256:74480f79a023f90dc6e18febbf7b8bac7508420f2006fabd512013c0c238f454 \ + --hash=sha256:819559cafa1a373b7096a482b504ae8a857c89593cf3a25af743ac9ecbd23480 \ + --hash=sha256:899dc660cd599d7352d6f10d83c95df430a38b410c1b66b407a6b29265d66469 \ + --hash=sha256:8c0c984a1b8fef4086329ff8dd19ac77576b384079247c770f29cc8ce3afa06c \ + --hash=sha256:9aae4406ea63d825636cc11ffb34ad3379335803216ee3a856787bcf5ccc751e \ + --hash=sha256:a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db \ + --hash=sha256:b6cc7ba72a8850621bfec987cb72623e703b7fe2b9127a161ce61e61558ad905 \ + --hash=sha256:bf01b5720be110540be4286e791db73f84a2b721072a3711efff6c324cdf074b \ + --hash=sha256:c02ce36ec760252242a33967d51c289fd0e1c0e6e5cc9397e2279177716add86 \ + --hash=sha256:d9e4432ff660d67d775c66ac42a67cf2453c27cb4d738fc22cb53b5d84c135d4 \ + --hash=sha256:daa564862dd0d39c00f8086f88700fdbe8bc717e993a21e90711acfed02f2402 \ + --hash=sha256:de78575669dddf6099a8a0f46a27e82a1783c557ccc38ee620ed8cc96d3be7d7 \ + --hash=sha256:e64857f395505ebf3d2569935506ae0dfc4a15cb80dc25261176c784662cdcc4 \ + --hash=sha256:f4bd856d702e5b0d96a00ec6b307b0f51c1982c2bf9c0052cf9019e9a544ba99 \ + --hash=sha256:f4c42102bc82a51108e449cbb32b19b180022941c727bac0cfd50170341f16ee +pyasn1-modules==0.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c \ + --hash=sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d +pyasn1==0.5.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57 \ + --hash=sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde +pycparser==2.21 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ + --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 +pycryptodome==3.19.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0101f647d11a1aae5a8ce4f5fad6644ae1b22bb65d05accc7d322943c69a74a6 \ + --hash=sha256:04dd31d3b33a6b22ac4d432b3274588917dcf850cc0c51c84eca1d8ed6933810 \ + --hash=sha256:05e33267394aad6db6595c0ce9d427fe21552f5425e116a925455e099fdf759a \ + --hash=sha256:08ce3558af5106c632baf6d331d261f02367a6bc3733086ae43c0f988fe042db \ + --hash=sha256:139ae2c6161b9dd5d829c9645d781509a810ef50ea8b657e2257c25ca20efe33 \ + --hash=sha256:17940dcf274fcae4a54ec6117a9ecfe52907ed5e2e438fe712fe7ca502672ed5 \ + --hash=sha256:190c53f51e988dceb60472baddce3f289fa52b0ec38fbe5fd20dd1d0f795c551 \ + --hash=sha256:22e0ae7c3a7f87dcdcf302db06ab76f20e83f09a6993c160b248d58274473bfa \ + --hash=sha256:3006c44c4946583b6de24fe0632091c2653d6256b99a02a3db71ca06472ea1e4 \ + --hash=sha256:45430dfaf1f421cf462c0dd824984378bef32b22669f2635cb809357dbaab405 \ + --hash=sha256:506c686a1eee6c00df70010be3b8e9e78f406af4f21b23162bbb6e9bdf5427bc \ + --hash=sha256:536f676963662603f1f2e6ab01080c54d8cd20f34ec333dcb195306fa7826997 \ + --hash=sha256:542f99d5026ac5f0ef391ba0602f3d11beef8e65aae135fa5b762f5ebd9d3bfb \ + --hash=sha256:560591c0777f74a5da86718f70dfc8d781734cf559773b64072bbdda44b3fc3e \ + --hash=sha256:5b1986c761258a5b4332a7f94a83f631c1ffca8747d75ab8395bf2e1b93283d9 \ + --hash=sha256:61bb3ccbf4bf32ad9af32da8badc24e888ae5231c617947e0f5401077f8b091f \ + --hash=sha256:7822f36d683f9ad7bc2145b2c2045014afdbbd1d9922a6d4ce1cbd6add79a01e \ + --hash=sha256:7919ccd096584b911f2a303c593280869ce1af9bf5d36214511f5e5a1bed8c34 \ + --hash=sha256:7c760c8a0479a4042111a8dd2f067d3ae4573da286c53f13cf6f5c53a5c1f631 \ + --hash=sha256:829b813b8ee00d9c8aba417621b94bc0b5efd18c928923802ad5ba4cf1ec709c \ + --hash=sha256:84c3e4fffad0c4988aef0d5591be3cad4e10aa7db264c65fadbc633318d20bde \ + --hash=sha256:8999316e57abcbd8085c91bc0ef75292c8618f41ca6d2b6132250a863a77d1e7 \ + --hash=sha256:8c1601e04d32087591d78e0b81e1e520e57a92796089864b20e5f18c9564b3fa \ + --hash=sha256:a0ab84755f4539db086db9ba9e9f3868d2e3610a3948cbd2a55e332ad83b01b0 \ + --hash=sha256:a9bcd5f3794879e91970f2bbd7d899780541d3ff439d8f2112441769c9f2ccea \ + --hash=sha256:bc35d463222cdb4dbebd35e0784155c81e161b9284e567e7e933d722e533331e \ + --hash=sha256:c1cc2f2ae451a676def1a73c1ae9120cd31af25db3f381893d45f75e77be2400 \ + --hash=sha256:d033947e7fd3e2ba9a031cb2d267251620964705a013c5a461fa5233cc025270 \ + --hash=sha256:d04f5f623a280fbd0ab1c1d8ecbd753193ab7154f09b6161b0f857a1a676c15f \ + --hash=sha256:d49a6c715d8cceffedabb6adb7e0cbf41ae1a2ff4adaeec9432074a80627dea1 \ + --hash=sha256:e249a784cc98a29c77cea9df54284a44b40cafbfae57636dd2f8775b48af2434 \ + --hash=sha256:fc7a79590e2b5d08530175823a242de6790abc73638cc6dc9d2684e7be2f5e49 +pydantic==1.10.5 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1fd326aff5d6c36f05735c7c9b3d5b0e933b4ca52ad0b6e4b38038d82703d35b \ + --hash=sha256:2185a3b3d98ab4506a3f6707569802d2d92c3a7ba3a9a35683a7709ea6c2aaa2 \ + --hash=sha256:261f357f0aecda005934e413dfd7aa4077004a174dafe414a8325e6098a8e419 \ + --hash=sha256:305d0376c516b0dfa1dbefeae8c21042b57b496892d721905a6ec6b79494a66d \ + --hash=sha256:3257bd714de9db2102b742570a56bf7978e90441193acac109b1f500290f5718 \ + --hash=sha256:3353072625ea2a9a6c81ad01b91e5c07fa70deb06368c71307529abf70d23325 \ + --hash=sha256:36e44a4de37b8aecffa81c081dbfe42c4d2bf9f6dff34d03dce157ec65eb0f15 \ + --hash=sha256:3bb99cf9655b377db1a9e47fa4479e3330ea96f4123c6c8200e482704bf1eda2 \ + --hash=sha256:3f9d9b2be177c3cb6027cd67fbf323586417868c06c3c85d0d101703136e6b31 \ + --hash=sha256:45edea10b75d3da43cfda12f3792833a3fa70b6eee4db1ed6aed528cef17c74e \ + --hash=sha256:51782fd81f09edcf265823c3bf43ff36d00db246eca39ee765ef58dc8421a642 \ + --hash=sha256:532e97c35719f137ee5405bd3eeddc5c06eb91a032bc755a44e34a712420daf3 \ + --hash=sha256:58e41dd1e977531ac6073b11baac8c013f3cd8706a01d3dc74e86955be8b2c0c \ + --hash=sha256:5920824fe1e21cbb3e38cf0f3dd24857c8959801d1031ce1fac1d50857a03bfb \ + --hash=sha256:5f3bc8f103b56a8c88021d481410874b1f13edf6e838da607dcb57ecff9b4594 \ + --hash=sha256:63200cd8af1af2c07964546b7bc8f217e8bda9d0a2ef0ee0c797b36353914984 \ + --hash=sha256:663d2dd78596c5fa3eb996bc3f34b8c2a592648ad10008f98d1348be7ae212fb \ + --hash=sha256:6a4b0aab29061262065bbdede617ef99cc5914d1bf0ddc8bcd8e3d7928d85bd6 \ + --hash=sha256:6bb0452d7b8516178c969d305d9630a3c9b8cf16fcf4713261c9ebd465af0d73 \ + --hash=sha256:72ef3783be8cbdef6bca034606a5de3862be6b72415dc5cb1fb8ddbac110049a \ + --hash=sha256:76c930ad0746c70f0368c4596020b736ab65b473c1f9b3872310a835d852eb19 \ + --hash=sha256:7c5b94d598c90f2f46b3a983ffb46ab806a67099d118ae0da7ef21a2a4033b28 \ + --hash=sha256:7ce1612e98c6326f10888df951a26ec1a577d8df49ddcaea87773bfbe23ba5cc \ + --hash=sha256:8481dca324e1c7b715ce091a698b181054d22072e848b6fc7895cd86f79b4449 \ + --hash=sha256:87f831e81ea0589cd18257f84386bf30154c5f4bed373b7b75e5cb0b5d53ea87 \ + --hash=sha256:9a9d9155e2a9f38b2eb9374c88f02fd4d6851ae17b65ee786a87d032f87008f8 \ + --hash=sha256:9e337ac83686645a46db0e825acceea8e02fca4062483f40e9ae178e8bd1103a \ + --hash=sha256:b429f7c457aebb7fbe7cd69c418d1cd7c6fdc4d3c8697f45af78b8d5a7955760 \ + --hash=sha256:b473d00ccd5c2061fd896ac127b7755baad233f8d996ea288af14ae09f8e0d1e \ + --hash=sha256:bd46a0e6296346c477e59a954da57beaf9c538da37b9df482e50f836e4a7d4bb \ + --hash=sha256:c428c0f64a86661fb4873495c4fac430ec7a7cef2b8c1c28f3d1a7277f9ea5ab \ + --hash=sha256:c9e5b778b6842f135902e2d82624008c6a79710207e28e86966cd136c621bfee \ + --hash=sha256:ca9075ab3de9e48b75fa8ccb897c34ccc1519177ad8841d99f7fd74cf43be5bf \ + --hash=sha256:f582cac9d11c227c652d3ce8ee223d94eb06f4228b52a8adaafa9fa62e73d5c9 \ + --hash=sha256:f5bee6c523d13944a1fdc6f0525bc86dbbd94372f17b83fa6331aabacc8fd08e \ + --hash=sha256:f836444b4c5ece128b23ec36a446c9ab7f9b0f7981d0d27e13a7c366ee163f8a +pyjwt==2.8.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de \ + --hash=sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320 +pyjwt[crypto]==2.8.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de \ + --hash=sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320 +pyopenssl==23.2.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:24f0dc5227396b3e831f4c7f602b950a5e9833d292c8e4a2e06b709292806ae2 \ + --hash=sha256:276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac +pyparsing==3.0.9 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ + --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc +python-dateutil==2.8.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \ + --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 +python-dotenv==1.0.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba \ + --hash=sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a +python-multipart==0.0.6 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:e9925a80bb668529f1b67c7fdb0a5dacdd7cbfc6fb0bff3ea443fe22bdd62132 \ + --hash=sha256:ee698bab5ef148b0a760751c261902cd096e57e10558e11aca17646b74ee1c18 +pytz==2023.3.post1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b \ + --hash=sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7 +pywin32==306 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform == "win32" or platform_system == "Windows") \ + --hash=sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d \ + --hash=sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65 \ + --hash=sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e \ + --hash=sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b \ + --hash=sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4 \ + --hash=sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040 \ + --hash=sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a \ + --hash=sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36 \ + --hash=sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8 \ + --hash=sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e \ + --hash=sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802 \ + --hash=sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a \ + --hash=sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407 \ + --hash=sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0 +pyyaml==6.0.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ + --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ + --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ + --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ + --hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \ + --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ + --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ + --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ + --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ + --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ + --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ + --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ + --hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \ + --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ + --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ + --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ + --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ + --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ + --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ + --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ + --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ + --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ + --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ + --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ + --hash=sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0 \ + --hash=sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515 \ + --hash=sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c \ + --hash=sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c \ + --hash=sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924 \ + --hash=sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34 \ + --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ + --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ + --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ + --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ + --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ + --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ + --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ + --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ + --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ + --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f +redis==4.4.4 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:68226f7ede928db8302f29ab088a157f41061fa946b7ae865452b6d7838bbffb \ + --hash=sha256:da92a39fec86438d3f1e2a1db33c312985806954fe860120b582a8430e231d8f +requests-oauthlib==1.3.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5 \ + --hash=sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a +requests==2.31.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 +rsa==4.9 ; python_version >= "3.10" and python_version < "4" \ + --hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 \ + --hash=sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21 +s3transfer==0.7.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:10d6923c6359175f264811ef4bf6161a3156ce8e350e705396a7557d6293c33a \ + --hash=sha256:fd3889a66f5fe17299fe75b82eae6cf722554edca744ca5d5fe308b104883d2e +setuptools==68.2.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87 \ + --hash=sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a +six==1.16.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 +sniffio==1.3.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101 \ + --hash=sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384 +sshpubkeys==3.3.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:3020ed4f8c846849299370fbe98ff4157b0ccc1accec105e07cfa9ae4bb55064 \ + --hash=sha256:946f76b8fe86704b0e7c56a00d80294e39bc2305999844f079a217885060b1ac +starlette==0.27.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75 \ + --hash=sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91 +typing-extensions==4.8.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \ + --hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef +tzdata==2023.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a \ + --hash=sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda +ujson==5.8.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c \ + --hash=sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7 \ + --hash=sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903 \ + --hash=sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c \ + --hash=sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5 \ + --hash=sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296 \ + --hash=sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f \ + --hash=sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3 \ + --hash=sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4 \ + --hash=sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207 \ + --hash=sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6 \ + --hash=sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb \ + --hash=sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e \ + --hash=sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130 \ + --hash=sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721 \ + --hash=sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0 \ + --hash=sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3 \ + --hash=sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc \ + --hash=sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a \ + --hash=sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916 \ + --hash=sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8 \ + --hash=sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6 \ + --hash=sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405 \ + --hash=sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c \ + --hash=sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042 \ + --hash=sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7 \ + --hash=sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425 \ + --hash=sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3 \ + --hash=sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30 \ + --hash=sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282 \ + --hash=sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a \ + --hash=sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a \ + --hash=sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75 \ + --hash=sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07 \ + --hash=sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08 \ + --hash=sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582 \ + --hash=sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9 \ + --hash=sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c \ + --hash=sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba \ + --hash=sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879 \ + --hash=sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94 \ + --hash=sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b \ + --hash=sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67 \ + --hash=sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f \ + --hash=sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2 \ + --hash=sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564 \ + --hash=sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76 \ + --hash=sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109 \ + --hash=sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7 \ + --hash=sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377 \ + --hash=sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5 \ + --hash=sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa \ + --hash=sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b \ + --hash=sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83 \ + --hash=sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec \ + --hash=sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf \ + --hash=sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae \ + --hash=sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95 \ + --hash=sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1 \ + --hash=sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f \ + --hash=sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c +uritemplate==4.1.1 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0 \ + --hash=sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e +urllib3==1.26.17 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:24d6a242c28d29af46c3fae832c36db3bbebcc533dd1bb549172cd739c82df21 \ + --hash=sha256:94a757d178c9be92ef5539b8840d48dc9cf1b2709c9d6b588232a055c524458b +uvicorn[standard]==0.23.2 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:1f9be6558f01239d4fdf22ef8126c39cb1ad0addf76c40e760549d2c2f43ab53 \ + --hash=sha256:4d3cc12d7727ba72b64d12d3cc7743124074c0a69f7b201512fc50c3e3f1569a +uvloop==0.17.0 ; (sys_platform != "win32" and sys_platform != "cygwin") and platform_python_implementation != "PyPy" and python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:0949caf774b9fcefc7c5756bacbbbd3fc4c05a6b7eebc7c7ad6f825b23998d6d \ + --hash=sha256:0ddf6baf9cf11a1a22c71487f39f15b2cf78eb5bde7e5b45fbb99e8a9d91b9e1 \ + --hash=sha256:1436c8673c1563422213ac6907789ecb2b070f5939b9cbff9ef7113f2b531595 \ + --hash=sha256:23609ca361a7fc587031429fa25ad2ed7242941adec948f9d10c045bfecab06b \ + --hash=sha256:2a6149e1defac0faf505406259561bc14b034cdf1d4711a3ddcdfbaa8d825a05 \ + --hash=sha256:2deae0b0fb00a6af41fe60a675cec079615b01d68beb4cc7b722424406b126a8 \ + --hash=sha256:307958f9fc5c8bb01fad752d1345168c0abc5d62c1b72a4a8c6c06f042b45b20 \ + --hash=sha256:30babd84706115626ea78ea5dbc7dd8d0d01a2e9f9b306d24ca4ed5796c66ded \ + --hash=sha256:3378eb62c63bf336ae2070599e49089005771cc651c8769aaad72d1bd9385a7c \ + --hash=sha256:3d97672dc709fa4447ab83276f344a165075fd9f366a97b712bdd3fee05efae8 \ + --hash=sha256:3db8de10ed684995a7f34a001f15b374c230f7655ae840964d51496e2f8a8474 \ + --hash=sha256:3ebeeec6a6641d0adb2ea71dcfb76017602ee2bfd8213e3fcc18d8f699c5104f \ + --hash=sha256:45cea33b208971e87a31c17622e4b440cac231766ec11e5d22c76fab3bf9df62 \ + --hash=sha256:6708f30db9117f115eadc4f125c2a10c1a50d711461699a0cbfaa45b9a78e376 \ + --hash=sha256:68532f4349fd3900b839f588972b3392ee56042e440dd5873dfbbcd2cc67617c \ + --hash=sha256:6aafa5a78b9e62493539456f8b646f85abc7093dd997f4976bb105537cf2635e \ + --hash=sha256:7d37dccc7ae63e61f7b96ee2e19c40f153ba6ce730d8ba4d3b4e9738c1dccc1b \ + --hash=sha256:864e1197139d651a76c81757db5eb199db8866e13acb0dfe96e6fc5d1cf45fc4 \ + --hash=sha256:8887d675a64cfc59f4ecd34382e5b4f0ef4ae1da37ed665adba0c2badf0d6578 \ + --hash=sha256:8efcadc5a0003d3a6e887ccc1fb44dec25594f117a94e3127954c05cf144d811 \ + --hash=sha256:9b09e0f0ac29eee0451d71798878eae5a4e6a91aa275e114037b27f7db72702d \ + --hash=sha256:a4aee22ece20958888eedbad20e4dbb03c37533e010fb824161b4f05e641f738 \ + --hash=sha256:a5abddb3558d3f0a78949c750644a67be31e47936042d4f6c888dd6f3c95f4aa \ + --hash=sha256:c092a2c1e736086d59ac8e41f9c98f26bbf9b9222a76f21af9dfe949b99b2eb9 \ + --hash=sha256:c686a47d57ca910a2572fddfe9912819880b8765e2f01dc0dd12a9bf8573e539 \ + --hash=sha256:cbbe908fda687e39afd6ea2a2f14c2c3e43f2ca88e3a11964b297822358d0e6c \ + --hash=sha256:ce9f61938d7155f79d3cb2ffa663147d4a76d16e08f65e2c66b77bd41b356718 \ + --hash=sha256:dbbaf9da2ee98ee2531e0c780455f2841e4675ff580ecf93fe5c48fe733b5667 \ + --hash=sha256:f1e507c9ee39c61bfddd79714e4f85900656db1aec4d40c6de55648e85c2799c \ + --hash=sha256:ff3d00b70ce95adce264462c930fbaecb29718ba6563db354608f37e49e09024 +vine==5.0.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:4c9dceab6f76ed92105027c49c823800dd33cacce13bdedc5b914e3514b7fb30 \ + --hash=sha256:7d3b1624a953da82ef63462013bbd271d3eb75751489f9807598e8f340bd637e +watchfiles==0.20.0 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:007dcc4a401093010b389c044e81172c8a2520dba257c88f8828b3d460c6bb38 \ + --hash=sha256:08dc702529bb06a2b23859110c214db245455532da5eaea602921687cfcd23db \ + --hash=sha256:0d82dbc1832da83e441d112069833eedd4cf583d983fb8dd666fbefbea9d99c0 \ + --hash=sha256:13f995d5152a8ba4ed7c2bbbaeee4e11a5944defc7cacd0ccb4dcbdcfd78029a \ + --hash=sha256:3796312bd3587e14926013612b23066912cf45a14af71cf2b20db1c12dadf4e9 \ + --hash=sha256:5392dd327a05f538c56edb1c6ebba6af91afc81b40822452342f6da54907bbdf \ + --hash=sha256:570848706440373b4cd8017f3e850ae17f76dbdf1e9045fc79023b11e1afe490 \ + --hash=sha256:608cd94a8767f49521901aff9ae0c92cc8f5a24d528db7d6b0295290f9d41193 \ + --hash=sha256:728575b6b94c90dd531514677201e8851708e6e4b5fe7028ac506a200b622019 \ + --hash=sha256:7d4e66a857621584869cfbad87039e65dadd7119f0d9bb9dbc957e089e32c164 \ + --hash=sha256:835df2da7a5df5464c4a23b2d963e1a9d35afa422c83bf4ff4380b3114603644 \ + --hash=sha256:87d9e1f75c4f86c93d73b5bd1ebe667558357548f11b4f8af4e0e272f79413ce \ + --hash=sha256:89d1de8218874925bce7bb2ae9657efc504411528930d7a83f98b1749864f2ef \ + --hash=sha256:99f4c65fd2fce61a571b2a6fcf747d6868db0bef8a934e8ca235cc8533944d95 \ + --hash=sha256:9a0351d20d03c6f7ad6b2e8a226a5efafb924c7755ee1e34f04c77c3682417fa \ + --hash=sha256:9b5c8d3be7b502f8c43a33c63166ada8828dbb0c6d49c8f9ce990a96de2f5a49 \ + --hash=sha256:a03d1e6feb7966b417f43c3e3783188167fd69c2063e86bad31e62c4ea794cc5 \ + --hash=sha256:b17d4176c49d207865630da5b59a91779468dd3e08692fe943064da260de2c7c \ + --hash=sha256:d0002d81c89a662b595645fb684a371b98ff90a9c7d8f8630c82f0fde8310458 \ + --hash=sha256:d97db179f7566dcf145c5179ddb2ae2a4450e3a634eb864b09ea04e68c252e8e \ + --hash=sha256:e43af4464daa08723c04b43cf978ab86cc55c684c16172622bdac64b34e36af0 \ + --hash=sha256:eccc8942bcdc7d638a01435d915b913255bbd66f018f1af051cd8afddb339ea3 +wcwidth==0.2.8 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:77f719e01648ed600dfa5402c347481c0992263b81a027344f3e1ba25493a704 \ + --hash=sha256:8705c569999ffbb4f6a87c6d1b80f324bd6db952f5eb0b95bc07517f4c1813d4 +websocket-client==1.6.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:3aad25d31284266bcfcfd1fd8a743f63282305a364b8d0948a43bd606acc652f \ + --hash=sha256:6cfc30d051ebabb73a5fa246efdcc14c8fbebbd0330f8984ac3bb6d9edd2ad03 +websockets==11.0.3 ; python_version >= "3.10" and python_version < "4.0" \ + --hash=sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd \ + --hash=sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f \ + --hash=sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998 \ + --hash=sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82 \ + --hash=sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788 \ + --hash=sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa \ + --hash=sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f \ + --hash=sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4 \ + --hash=sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7 \ + --hash=sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f \ + --hash=sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd \ + --hash=sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69 \ + --hash=sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb \ + --hash=sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b \ + --hash=sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016 \ + --hash=sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac \ + --hash=sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4 \ + --hash=sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb \ + --hash=sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99 \ + --hash=sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e \ + --hash=sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54 \ + --hash=sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf \ + --hash=sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007 \ + --hash=sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3 \ + --hash=sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6 \ + --hash=sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86 \ + --hash=sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1 \ + --hash=sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61 \ + --hash=sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11 \ + --hash=sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8 \ + --hash=sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f \ + --hash=sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931 \ + --hash=sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526 \ + --hash=sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016 \ + --hash=sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae \ + --hash=sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd \ + --hash=sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b \ + --hash=sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311 \ + --hash=sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af \ + --hash=sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152 \ + --hash=sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288 \ + --hash=sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de \ + --hash=sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97 \ + --hash=sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d \ + --hash=sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d \ + --hash=sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca \ + --hash=sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0 \ + --hash=sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9 \ + --hash=sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b \ + --hash=sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e \ + --hash=sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128 \ + --hash=sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d \ + --hash=sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c \ + --hash=sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5 \ + --hash=sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6 \ + --hash=sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b \ + --hash=sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b \ + --hash=sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280 \ + --hash=sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c \ + --hash=sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c \ + --hash=sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f \ + --hash=sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20 \ + --hash=sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8 \ + --hash=sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb \ + --hash=sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602 \ + --hash=sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf \ + --hash=sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0 \ + --hash=sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74 \ + --hash=sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0 \ + --hash=sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564 diff --git a/setup.py b/setup.py index d143d326e..a7aea7780 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,6 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- # -# Copyright 2017 Google Inc. +# Copyright 2023 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,19 +17,16 @@ # yapf: disable -from __future__ import unicode_literals - import sys from setuptools import find_packages from setuptools import setup +import turbinia # pylint: disable=wrong-import-position # make sure turbinia is in path sys.path.insert(0, '.') -import turbinia # pylint: disable=wrong-import-position - turbinia_description = ( 'Turbinia is an open-source framework for deploying, managing, and running' 'forensic workloads on cloud platforms. It is intended to automate running ' @@ -39,9 +35,7 @@ 'large amounts of evidence, and decreasing response time by parallelizing' 'processing where possible.') -requirements = [] -with open('requirements.txt','r') as f: - requirements = f.read().splitlines() + setup( name='turbinia', description='Automation and Scaling of Digital Forensics Tools', @@ -60,17 +54,4 @@ include_package_data=True, zip_safe=False, entry_points={'console_scripts': ['turbiniactl=turbinia.turbiniactl:main']}, - install_requires=requirements, - extras_require={ - 'dev': ['mock', 'nose', 'yapf', 'celery', 'coverage'], - 'local': ['celery', 'kombu', 'redis'], - 'worker': [ - 'docker-explorer>=20191104', - 'impacket', - 'plaso>=20200430', - 'pyhindsight>=20200607' - ] - }, - use_scm_version=True, - setup_requires=['setuptools_scm'] ) diff --git a/turbinia/__init__.py b/turbinia/__init__.py index bb81c4669..951941d8b 100644 --- a/turbinia/__init__.py +++ b/turbinia/__init__.py @@ -16,13 +16,15 @@ import logging +from importlib import metadata as importlib_metadata + log = logging.getLogger('turbinia') -from pkg_resources import get_distribution, DistributionNotFound try: - __version__ = get_distribution(__name__).version -except DistributionNotFound: - __version__ = "unknown" + dist = importlib_metadata.distribution(__name__) + __version__ = dist.version +except importlib_metadata.PackageNotFoundError: + __version__ = 'unknown' def log_and_report(message, trace): diff --git a/turbinia/api/api_server_test.py b/turbinia/api/api_server_test.py index 27ecee652..d6c8849be 100644 --- a/turbinia/api/api_server_test.py +++ b/turbinia/api/api_server_test.py @@ -404,9 +404,11 @@ def testEvidenceQueryNotFound(self, testQueryEvidence): f'request_id.') }) + @mock.patch('turbinia.state_manager.RedisStateManager.get_attribute') @mock.patch('turbinia.api.routes.evidence.datetime') @mock.patch('turbinia.api.routes.evidence.os.makedirs') - def testEvidenceUpload(self, mock_makedirs, mock_datetime): + def testEvidenceUpload( + self, mock_makedirs, mock_datetime, mock_get_attribute): """Tests uploading evidence.""" mocked_now = datetime.datetime.now() mock_datetime.now.return_value = mocked_now diff --git a/turbinia/api/cli/poetry.lock b/turbinia/api/cli/poetry.lock new file mode 100644 index 000000000..8241d6595 --- /dev/null +++ b/turbinia/api/cli/poetry.lock @@ -0,0 +1,577 @@ +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "cachetools" +version = "5.3.1" +description = "Extensible memoizing collections and decorators" +optional = false +python-versions = ">=3.7" +files = [ + {file = "cachetools-5.3.1-py3-none-any.whl", hash = "sha256:95ef631eeaea14ba2e36f06437f36463aac3a096799e876ee55e5cdccb102590"}, + {file = "cachetools-5.3.1.tar.gz", hash = "sha256:dce83f2d9b4e1f732a8cd44af8e8fab2dbe46201467fc98b3ef8f269092bf62b"}, +] + +[[package]] +name = "certifi" +version = "2023.7.22" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.0.tar.gz", hash = "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win32.whl", hash = "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win32.whl", hash = "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win32.whl", hash = "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win32.whl", hash = "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win32.whl", hash = "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884"}, + {file = "charset_normalizer-3.3.0-py3-none-any.whl", hash = "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "google-auth" +version = "2.23.3" +description = "Google Authentication Library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-auth-2.23.3.tar.gz", hash = "sha256:6864247895eea5d13b9c57c9e03abb49cb94ce2dc7c58e91cba3248c7477c9e3"}, + {file = "google_auth-2.23.3-py2.py3-none-any.whl", hash = "sha256:a8f4608e65c244ead9e0538f181a96c6e11199ec114d41f1d7b1bffa96937bda"}, +] + +[package.dependencies] +cachetools = ">=2.0.0,<6.0" +pyasn1-modules = ">=0.2.1" +rsa = ">=3.1.4,<5" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] +enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] +pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +reauth = ["pyu2f (>=0.1.5)"] +requests = ["requests (>=2.20.0,<3.0.0.dev0)"] + +[[package]] +name = "google-auth-oauthlib" +version = "1.1.0" +description = "Google Authentication Library" +optional = false +python-versions = ">=3.6" +files = [ + {file = "google-auth-oauthlib-1.1.0.tar.gz", hash = "sha256:83ea8c3b0881e453790baff4448e8a6112ac8778d1de9da0b68010b843937afb"}, + {file = "google_auth_oauthlib-1.1.0-py2.py3-none-any.whl", hash = "sha256:089c6e587d36f4803ac7e0720c045c6a8b1fd1790088b8424975b90d0ee61c12"}, +] + +[package.dependencies] +google-auth = ">=2.15.0" +requests-oauthlib = ">=0.7.0" + +[package.extras] +tool = ["click (>=6.0.0)"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "numpy" +version = "1.25.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3"}, + {file = "numpy-1.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f"}, + {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187"}, + {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357"}, + {file = "numpy-1.25.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9"}, + {file = "numpy-1.25.2-cp310-cp310-win32.whl", hash = "sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044"}, + {file = "numpy-1.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545"}, + {file = "numpy-1.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418"}, + {file = "numpy-1.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f"}, + {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2"}, + {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf"}, + {file = "numpy-1.25.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364"}, + {file = "numpy-1.25.2-cp311-cp311-win32.whl", hash = "sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d"}, + {file = "numpy-1.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4"}, + {file = "numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3"}, + {file = "numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926"}, + {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca"}, + {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295"}, + {file = "numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f"}, + {file = "numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01"}, + {file = "numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf"}, + {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"}, +] + +[[package]] +name = "numpy" +version = "1.26.1" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = "<3.13,>=3.9" +files = [ + {file = "numpy-1.26.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af"}, + {file = "numpy-1.26.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244"}, + {file = "numpy-1.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67"}, + {file = "numpy-1.26.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2"}, + {file = "numpy-1.26.1-cp310-cp310-win32.whl", hash = "sha256:d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297"}, + {file = "numpy-1.26.1-cp310-cp310-win_amd64.whl", hash = "sha256:d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a"}, + {file = "numpy-1.26.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3"}, + {file = "numpy-1.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974"}, + {file = "numpy-1.26.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c"}, + {file = "numpy-1.26.1-cp311-cp311-win32.whl", hash = "sha256:b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b"}, + {file = "numpy-1.26.1-cp311-cp311-win_amd64.whl", hash = "sha256:3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f"}, + {file = "numpy-1.26.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e"}, + {file = "numpy-1.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124"}, + {file = "numpy-1.26.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c"}, + {file = "numpy-1.26.1-cp312-cp312-win32.whl", hash = "sha256:af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66"}, + {file = "numpy-1.26.1-cp312-cp312-win_amd64.whl", hash = "sha256:9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e"}, + {file = "numpy-1.26.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e"}, + {file = "numpy-1.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908"}, + {file = "numpy-1.26.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5"}, + {file = "numpy-1.26.1-cp39-cp39-win32.whl", hash = "sha256:d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104"}, + {file = "numpy-1.26.1-cp39-cp39-win_amd64.whl", hash = "sha256:59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42"}, + {file = "numpy-1.26.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f"}, + {file = "numpy-1.26.1.tar.gz", hash = "sha256:c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe"}, +] + +[[package]] +name = "oauthlib" +version = "3.2.2" +description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" +optional = false +python-versions = ">=3.6" +files = [ + {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, + {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, +] + +[package.extras] +rsa = ["cryptography (>=3.0.0)"] +signals = ["blinker (>=1.4.0)"] +signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] + +[[package]] +name = "pandas" +version = "2.1.0" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:40dd20439ff94f1b2ed55b393ecee9cb6f3b08104c2c40b0cb7186a2f0046242"}, + {file = "pandas-2.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d4f38e4fedeba580285eaac7ede4f686c6701a9e618d8a857b138a126d067f2f"}, + {file = "pandas-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e6a0fe052cf27ceb29be9429428b4918f3740e37ff185658f40d8702f0b3e09"}, + {file = "pandas-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d81e1813191070440d4c7a413cb673052b3b4a984ffd86b8dd468c45742d3cc"}, + {file = "pandas-2.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eb20252720b1cc1b7d0b2879ffc7e0542dd568f24d7c4b2347cb035206936421"}, + {file = "pandas-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:38f74ef7ebc0ffb43b3d633e23d74882bce7e27bfa09607f3c5d3e03ffd9a4a5"}, + {file = "pandas-2.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cda72cc8c4761c8f1d97b169661f23a86b16fdb240bdc341173aee17e4d6cedd"}, + {file = "pandas-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d97daeac0db8c993420b10da4f5f5b39b01fc9ca689a17844e07c0a35ac96b4b"}, + {file = "pandas-2.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8c58b1113892e0c8078f006a167cc210a92bdae23322bb4614f2f0b7a4b510f"}, + {file = "pandas-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:629124923bcf798965b054a540f9ccdfd60f71361255c81fa1ecd94a904b9dd3"}, + {file = "pandas-2.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:70cf866af3ab346a10debba8ea78077cf3a8cd14bd5e4bed3d41555a3280041c"}, + {file = "pandas-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:d53c8c1001f6a192ff1de1efe03b31a423d0eee2e9e855e69d004308e046e694"}, + {file = "pandas-2.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86f100b3876b8c6d1a2c66207288ead435dc71041ee4aea789e55ef0e06408cb"}, + {file = "pandas-2.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28f330845ad21c11db51e02d8d69acc9035edfd1116926ff7245c7215db57957"}, + {file = "pandas-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9a6ccf0963db88f9b12df6720e55f337447aea217f426a22d71f4213a3099a6"}, + {file = "pandas-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d99e678180bc59b0c9443314297bddce4ad35727a1a2656dbe585fd78710b3b9"}, + {file = "pandas-2.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b31da36d376d50a1a492efb18097b9101bdbd8b3fbb3f49006e02d4495d4c644"}, + {file = "pandas-2.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0164b85937707ec7f70b34a6c3a578dbf0f50787f910f21ca3b26a7fd3363437"}, + {file = "pandas-2.1.0.tar.gz", hash = "sha256:62c24c7fc59e42b775ce0679cfa7b14a5f9bfb7643cfbe708c960699e05fb918"}, +] + +[package.dependencies] +numpy = {version = ">=1.23.2", markers = "python_version >= \"3.11\""} +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.1" + +[package.extras] +all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"] +aws = ["s3fs (>=2022.05.0)"] +clipboard = ["PyQt5 (>=5.15.6)", "qtpy (>=2.2.0)"] +compression = ["zstandard (>=0.17.0)"] +computation = ["scipy (>=1.8.1)", "xarray (>=2022.03.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pyxlsb (>=1.0.9)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)"] +feather = ["pyarrow (>=7.0.0)"] +fss = ["fsspec (>=2022.05.0)"] +gcp = ["gcsfs (>=2022.05.0)", "pandas-gbq (>=0.17.5)"] +hdf5 = ["tables (>=3.7.0)"] +html = ["beautifulsoup4 (>=4.11.1)", "html5lib (>=1.1)", "lxml (>=4.8.0)"] +mysql = ["SQLAlchemy (>=1.4.36)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.8.10)"] +parquet = ["pyarrow (>=7.0.0)"] +performance = ["bottleneck (>=1.3.4)", "numba (>=0.55.2)", "numexpr (>=2.8.0)"] +plot = ["matplotlib (>=3.6.1)"] +postgresql = ["SQLAlchemy (>=1.4.36)", "psycopg2 (>=2.9.3)"] +spss = ["pyreadstat (>=1.1.5)"] +sql-other = ["SQLAlchemy (>=1.4.36)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.8.0)"] + +[[package]] +name = "pandas" +version = "2.1.1" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58d997dbee0d4b64f3cb881a24f918b5f25dd64ddf31f467bb9b67ae4c63a1e4"}, + {file = "pandas-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02304e11582c5d090e5a52aec726f31fe3f42895d6bfc1f28738f9b64b6f0614"}, + {file = "pandas-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffa8f0966de2c22de408d0e322db2faed6f6e74265aa0856f3824813cf124363"}, + {file = "pandas-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1f84c144dee086fe4f04a472b5cd51e680f061adf75c1ae4fc3a9275560f8f4"}, + {file = "pandas-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:75ce97667d06d69396d72be074f0556698c7f662029322027c226fd7a26965cb"}, + {file = "pandas-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:4c3f32fd7c4dccd035f71734df39231ac1a6ff95e8bdab8d891167197b7018d2"}, + {file = "pandas-2.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e2959720b70e106bb1d8b6eadd8ecd7c8e99ccdbe03ee03260877184bb2877d"}, + {file = "pandas-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:25e8474a8eb258e391e30c288eecec565bfed3e026f312b0cbd709a63906b6f8"}, + {file = "pandas-2.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8bd1685556f3374520466998929bade3076aeae77c3e67ada5ed2b90b4de7f0"}, + {file = "pandas-2.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc3657869c7902810f32bd072f0740487f9e030c1a3ab03e0af093db35a9d14e"}, + {file = "pandas-2.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:05674536bd477af36aa2effd4ec8f71b92234ce0cc174de34fd21e2ee99adbc2"}, + {file = "pandas-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:b407381258a667df49d58a1b637be33e514b07f9285feb27769cedb3ab3d0b3a"}, + {file = "pandas-2.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c747793c4e9dcece7bb20156179529898abf505fe32cb40c4052107a3c620b49"}, + {file = "pandas-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3bcad1e6fb34b727b016775bea407311f7721db87e5b409e6542f4546a4951ea"}, + {file = "pandas-2.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5ec7740f9ccb90aec64edd71434711f58ee0ea7f5ed4ac48be11cfa9abf7317"}, + {file = "pandas-2.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29deb61de5a8a93bdd033df328441a79fcf8dd3c12d5ed0b41a395eef9cd76f0"}, + {file = "pandas-2.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4f99bebf19b7e03cf80a4e770a3e65eee9dd4e2679039f542d7c1ace7b7b1daa"}, + {file = "pandas-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:84e7e910096416adec68075dc87b986ff202920fb8704e6d9c8c9897fe7332d6"}, + {file = "pandas-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:366da7b0e540d1b908886d4feb3d951f2f1e572e655c1160f5fde28ad4abb750"}, + {file = "pandas-2.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e50e72b667415a816ac27dfcfe686dc5a0b02202e06196b943d54c4f9c7693e"}, + {file = "pandas-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc1ab6a25da197f03ebe6d8fa17273126120874386b4ac11c1d687df288542dd"}, + {file = "pandas-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0dbfea0dd3901ad4ce2306575c54348d98499c95be01b8d885a2737fe4d7a98"}, + {file = "pandas-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0489b0e6aa3d907e909aef92975edae89b1ee1654db5eafb9be633b0124abe97"}, + {file = "pandas-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:4cdb0fab0400c2cb46dafcf1a0fe084c8bb2480a1fa8d81e19d15e12e6d4ded2"}, + {file = "pandas-2.1.1.tar.gz", hash = "sha256:fecb198dc389429be557cde50a2d46da8434a17fe37d7d41ff102e3987fd947b"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.1" + +[package.extras] +all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"] +aws = ["s3fs (>=2022.05.0)"] +clipboard = ["PyQt5 (>=5.15.6)", "qtpy (>=2.2.0)"] +compression = ["zstandard (>=0.17.0)"] +computation = ["scipy (>=1.8.1)", "xarray (>=2022.03.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pyxlsb (>=1.0.9)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)"] +feather = ["pyarrow (>=7.0.0)"] +fss = ["fsspec (>=2022.05.0)"] +gcp = ["gcsfs (>=2022.05.0)", "pandas-gbq (>=0.17.5)"] +hdf5 = ["tables (>=3.7.0)"] +html = ["beautifulsoup4 (>=4.11.1)", "html5lib (>=1.1)", "lxml (>=4.8.0)"] +mysql = ["SQLAlchemy (>=1.4.36)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.8.10)"] +parquet = ["pyarrow (>=7.0.0)"] +performance = ["bottleneck (>=1.3.4)", "numba (>=0.55.2)", "numexpr (>=2.8.0)"] +plot = ["matplotlib (>=3.6.1)"] +postgresql = ["SQLAlchemy (>=1.4.36)", "psycopg2 (>=2.9.3)"] +spss = ["pyreadstat (>=1.1.5)"] +sql-other = ["SQLAlchemy (>=1.4.36)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.8.0)"] + +[[package]] +name = "pyasn1" +version = "0.5.0" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, + {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"}, +] + +[[package]] +name = "pyasn1-modules" +version = "0.3.0" +description = "A collection of ASN.1-based protocols modules" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "pyasn1_modules-0.3.0-py2.py3-none-any.whl", hash = "sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d"}, + {file = "pyasn1_modules-0.3.0.tar.gz", hash = "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c"}, +] + +[package.dependencies] +pyasn1 = ">=0.4.6,<0.6.0" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "pytz" +version = "2023.3.post1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, +] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "requests-oauthlib" +version = "1.3.1" +description = "OAuthlib authentication support for Requests." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"}, + {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"}, +] + +[package.dependencies] +oauthlib = ">=3.0.0" +requests = ">=2.0.0" + +[package.extras] +rsa = ["oauthlib[signedtoken] (>=3.0.0)"] + +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +optional = false +python-versions = ">=3.6,<4" +files = [ + {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, + {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, +] + +[package.dependencies] +pyasn1 = ">=0.1.3" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "turbinia-api-lib" +version = "1.0.1" +description = "Turbinia API Server" +optional = false +python-versions = ">=3.6" +files = [ + {file = "turbinia-api-lib-1.0.1.tar.gz", hash = "sha256:f652638c1ed34e873a440fd4275ec4ea07aadde1f12b7b63ecc587a91dd8d585"}, + {file = "turbinia_api_lib-1.0.1-py3-none-any.whl", hash = "sha256:c9e2fa3226bc489bbc714c7831cda8d7ee93c8c2e63db3429e7ab8ac40ab63a4"}, +] + +[package.dependencies] +python-dateutil = "*" +urllib3 = ">=1.25.3" + +[[package]] +name = "tzdata" +version = "2023.3" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, + {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, +] + +[[package]] +name = "urllib3" +version = "2.0.7" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.7" +files = [ + {file = "urllib3-2.0.7-py3-none-any.whl", hash = "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e"}, + {file = "urllib3-2.0.7.tar.gz", hash = "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.10" +content-hash = "a6e2a6803da03ab3f10d2f9436eae5b5efb5b713c8cc69eabc74542daeb7a3cb" diff --git a/turbinia/api/cli/pyproject.toml b/turbinia/api/cli/pyproject.toml new file mode 100644 index 000000000..a2a651f12 --- /dev/null +++ b/turbinia/api/cli/pyproject.toml @@ -0,0 +1,24 @@ +[tool.poetry] +name = "turbinia-client" +version = "1.0.3" +description = "Turbinia command-line tool" +authors = ["Turbinia Developers "] +maintainers = ["Turbinia Developers "] +license = "Apache-2.0" +readme = "README.rst" +repository = "https://github.com/google/turbinia" +documentation = "https://turbinia.readthedocs.io/en/latest/" + +[tool.poetry.scripts] +turbinia-client = "turbinia_client.turbiniacli_tool:main" + +[tool.poetry.dependencies] +python = "^3.10" +click = "^8.1.7" +turbinia-api-lib = "^1.0.1" +google-auth-oauthlib = "^1.1.0" +pandas = "^2.1.0" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/turbinia/api/cli/requirements.txt b/turbinia/api/cli/requirements.txt index 02e75977a..68c175a87 100644 --- a/turbinia/api/cli/requirements.txt +++ b/turbinia/api/cli/requirements.txt @@ -1,4 +1,208 @@ -click -turbinia-api-lib -google-auth-oauthlib -pandas \ No newline at end of file +cachetools==5.3.1 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:95ef631eeaea14ba2e36f06437f36463aac3a096799e876ee55e5cdccb102590 \ + --hash=sha256:dce83f2d9b4e1f732a8cd44af8e8fab2dbe46201467fc98b3ef8f269092bf62b +certifi==2023.7.22 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ + --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 +charset-normalizer==3.3.0 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843 \ + --hash=sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786 \ + --hash=sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e \ + --hash=sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8 \ + --hash=sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4 \ + --hash=sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa \ + --hash=sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d \ + --hash=sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82 \ + --hash=sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7 \ + --hash=sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895 \ + --hash=sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d \ + --hash=sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a \ + --hash=sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382 \ + --hash=sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678 \ + --hash=sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b \ + --hash=sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e \ + --hash=sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741 \ + --hash=sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4 \ + --hash=sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596 \ + --hash=sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9 \ + --hash=sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69 \ + --hash=sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c \ + --hash=sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77 \ + --hash=sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13 \ + --hash=sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459 \ + --hash=sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e \ + --hash=sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7 \ + --hash=sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908 \ + --hash=sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a \ + --hash=sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f \ + --hash=sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8 \ + --hash=sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482 \ + --hash=sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d \ + --hash=sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d \ + --hash=sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545 \ + --hash=sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34 \ + --hash=sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86 \ + --hash=sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6 \ + --hash=sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe \ + --hash=sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e \ + --hash=sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc \ + --hash=sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7 \ + --hash=sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd \ + --hash=sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c \ + --hash=sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557 \ + --hash=sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a \ + --hash=sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89 \ + --hash=sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078 \ + --hash=sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e \ + --hash=sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4 \ + --hash=sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403 \ + --hash=sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0 \ + --hash=sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89 \ + --hash=sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115 \ + --hash=sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9 \ + --hash=sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05 \ + --hash=sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a \ + --hash=sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec \ + --hash=sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56 \ + --hash=sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38 \ + --hash=sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479 \ + --hash=sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c \ + --hash=sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e \ + --hash=sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd \ + --hash=sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186 \ + --hash=sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455 \ + --hash=sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c \ + --hash=sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65 \ + --hash=sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78 \ + --hash=sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287 \ + --hash=sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df \ + --hash=sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43 \ + --hash=sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1 \ + --hash=sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7 \ + --hash=sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989 \ + --hash=sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a \ + --hash=sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63 \ + --hash=sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884 \ + --hash=sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649 \ + --hash=sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810 \ + --hash=sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828 \ + --hash=sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4 \ + --hash=sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2 \ + --hash=sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd \ + --hash=sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5 \ + --hash=sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe \ + --hash=sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293 \ + --hash=sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e \ + --hash=sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e \ + --hash=sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8 +click==8.1.7 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ + --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de +colorama==0.4.6 ; python_version >= "3.7" and python_version < "4.0" and platform_system == "Windows" \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 +google-auth-oauthlib==1.1.0 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:089c6e587d36f4803ac7e0720c045c6a8b1fd1790088b8424975b90d0ee61c12 \ + --hash=sha256:83ea8c3b0881e453790baff4448e8a6112ac8778d1de9da0b68010b843937afb +google-auth==2.23.3 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:6864247895eea5d13b9c57c9e03abb49cb94ce2dc7c58e91cba3248c7477c9e3 \ + --hash=sha256:a8f4608e65c244ead9e0538f181a96c6e11199ec114d41f1d7b1bffa96937bda +idna==3.4 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 +importlib-metadata==6.7.0 ; python_version >= "3.7" and python_version < "3.8" \ + --hash=sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4 \ + --hash=sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5 +numpy==1.21.1 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:01721eefe70544d548425a07c80be8377096a54118070b8a62476866d5208e33 \ + --hash=sha256:0318c465786c1f63ac05d7c4dbcecd4d2d7e13f0959b01b534ea1e92202235c5 \ + --hash=sha256:05a0f648eb28bae4bcb204e6fd14603de2908de982e761a2fc78efe0f19e96e1 \ + --hash=sha256:1412aa0aec3e00bc23fbb8664d76552b4efde98fb71f60737c83efbac24112f1 \ + --hash=sha256:25b40b98ebdd272bc3020935427a4530b7d60dfbe1ab9381a39147834e985eac \ + --hash=sha256:2d4d1de6e6fb3d28781c73fbde702ac97f03d79e4ffd6598b880b2d95d62ead4 \ + --hash=sha256:38e8648f9449a549a7dfe8d8755a5979b45b3538520d1e735637ef28e8c2dc50 \ + --hash=sha256:4a3d5fb89bfe21be2ef47c0614b9c9c707b7362386c9a3ff1feae63e0267ccb6 \ + --hash=sha256:635e6bd31c9fb3d475c8f44a089569070d10a9ef18ed13738b03049280281267 \ + --hash=sha256:73101b2a1fef16602696d133db402a7e7586654682244344b8329cdcbbb82172 \ + --hash=sha256:791492091744b0fe390a6ce85cc1bf5149968ac7d5f0477288f78c89b385d9af \ + --hash=sha256:7a708a79c9a9d26904d1cca8d383bf869edf6f8e7650d85dbc77b041e8c5a0f8 \ + --hash=sha256:88c0b89ad1cc24a5efbb99ff9ab5db0f9a86e9cc50240177a571fbe9c2860ac2 \ + --hash=sha256:8a326af80e86d0e9ce92bcc1e65c8ff88297de4fa14ee936cb2293d414c9ec63 \ + --hash=sha256:8a92c5aea763d14ba9d6475803fc7904bda7decc2a0a68153f587ad82941fec1 \ + --hash=sha256:91c6f5fc58df1e0a3cc0c3a717bb3308ff850abdaa6d2d802573ee2b11f674a8 \ + --hash=sha256:95b995d0c413f5d0428b3f880e8fe1660ff9396dcd1f9eedbc311f37b5652e16 \ + --hash=sha256:9749a40a5b22333467f02fe11edc98f022133ee1bfa8ab99bda5e5437b831214 \ + --hash=sha256:978010b68e17150db8765355d1ccdd450f9fc916824e8c4e35ee620590e234cd \ + --hash=sha256:9a513bd9c1551894ee3d31369f9b07460ef223694098cf27d399513415855b68 \ + --hash=sha256:a75b4498b1e93d8b700282dc8e655b8bd559c0904b3910b144646dbbbc03e062 \ + --hash=sha256:c6a2324085dd52f96498419ba95b5777e40b6bcbc20088fddb9e8cbb58885e8e \ + --hash=sha256:d7a4aeac3b94af92a9373d6e77b37691b86411f9745190d2c351f410ab3a791f \ + --hash=sha256:d9e7912a56108aba9b31df688a4c4f5cb0d9d3787386b87d504762b6754fbb1b \ + --hash=sha256:dff4af63638afcc57a3dfb9e4b26d434a7a602d225b42d746ea7fe2edf1342fd \ + --hash=sha256:e46ceaff65609b5399163de5893d8f2a82d3c77d5e56d976c8b5fb01faa6b671 \ + --hash=sha256:f01f28075a92eede918b965e86e8f0ba7b7797a95aa8d35e1cc8821f5fc3ad6a \ + --hash=sha256:fd7d7409fa643a91d0a05c7554dd68aa9c9bb16e186f6ccfe40d6e003156e33a +oauthlib==3.2.2 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca \ + --hash=sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918 +pandas==1.1.5 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:0a643bae4283a37732ddfcecab3f62dd082996021b980f580903f4e8e01b3c5b \ + --hash=sha256:0de3ddb414d30798cbf56e642d82cac30a80223ad6fe484d66c0ce01a84d6f2f \ + --hash=sha256:19a2148a1d02791352e9fa637899a78e371a3516ac6da5c4edc718f60cbae648 \ + --hash=sha256:21b5a2b033380adbdd36b3116faaf9a4663e375325831dac1b519a44f9e439bb \ + --hash=sha256:24c7f8d4aee71bfa6401faeba367dd654f696a77151a8a28bc2013f7ced4af98 \ + --hash=sha256:26fa92d3ac743a149a31b21d6f4337b0594b6302ea5575b37af9ca9611e8981a \ + --hash=sha256:2860a97cbb25444ffc0088b457da0a79dc79f9c601238a3e0644312fcc14bf11 \ + --hash=sha256:2b1c6cd28a0dfda75c7b5957363333f01d370936e4c6276b7b8e696dd500582a \ + --hash=sha256:2c2f7c670ea4e60318e4b7e474d56447cf0c7d83b3c2a5405a0dbb2600b9c48e \ + --hash=sha256:3be7a7a0ca71a2640e81d9276f526bca63505850add10206d0da2e8a0a325dae \ + --hash=sha256:4c62e94d5d49db116bef1bd5c2486723a292d79409fc9abd51adf9e05329101d \ + --hash=sha256:5008374ebb990dad9ed48b0f5d0038124c73748f5384cc8c46904dace27082d9 \ + --hash=sha256:5447ea7af4005b0daf695a316a423b96374c9c73ffbd4533209c5ddc369e644b \ + --hash=sha256:573fba5b05bf2c69271a32e52399c8de599e4a15ab7cec47d3b9c904125ab788 \ + --hash=sha256:5a780260afc88268a9d3ac3511d8f494fdcf637eece62fb9eb656a63d53eb7ca \ + --hash=sha256:70865f96bb38fec46f7ebd66d4b5cfd0aa6b842073f298d621385ae3898d28b5 \ + --hash=sha256:731568be71fba1e13cae212c362f3d2ca8932e83cb1b85e3f1b4dd77d019254a \ + --hash=sha256:b61080750d19a0122469ab59b087380721d6b72a4e7d962e4d7e63e0c4504814 \ + --hash=sha256:bf23a3b54d128b50f4f9d4675b3c1857a688cc6731a32f931837d72effb2698d \ + --hash=sha256:c16d59c15d946111d2716856dd5479221c9e4f2f5c7bc2d617f39d870031e086 \ + --hash=sha256:c61c043aafb69329d0f961b19faa30b1dab709dd34c9388143fc55680059e55a \ + --hash=sha256:c94ff2780a1fd89f190390130d6d36173ca59fcfb3fe0ff596f9a56518191ccb \ + --hash=sha256:edda9bacc3843dfbeebaf7a701763e68e741b08fccb889c003b0a52f0ee95782 \ + --hash=sha256:f10fc41ee3c75a474d3bdf68d396f10782d013d7f67db99c0efbfd0acb99701b +pyasn1-modules==0.3.0 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c \ + --hash=sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d +pyasn1==0.5.0 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57 \ + --hash=sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde +python-dateutil==2.8.2 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \ + --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 +pytz==2023.3.post1 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b \ + --hash=sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7 +requests-oauthlib==1.3.1 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5 \ + --hash=sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a +requests==2.31.0 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 +rsa==4.9 ; python_version >= "3.7" and python_version < "4" \ + --hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 \ + --hash=sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21 +six==1.16.0 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 +turbinia-api-lib==1.0.1 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:c9e2fa3226bc489bbc714c7831cda8d7ee93c8c2e63db3429e7ab8ac40ab63a4 \ + --hash=sha256:f652638c1ed34e873a440fd4275ec4ea07aadde1f12b7b63ecc587a91dd8d585 +typing-extensions==4.7.1 ; python_version >= "3.7" and python_version < "3.8" \ + --hash=sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36 \ + --hash=sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2 +urllib3==2.0.7 ; python_version >= "3.7" and python_version < "4.0" \ + --hash=sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84 \ + --hash=sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e +zipp==3.15.0 ; python_version >= "3.7" and python_version < "3.8" \ + --hash=sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b \ + --hash=sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556 diff --git a/turbinia/api/cli/setup.py b/turbinia/api/cli/setup.py deleted file mode 100644 index ca6b2ed31..000000000 --- a/turbinia/api/cli/setup.py +++ /dev/null @@ -1,30 +0,0 @@ -""" -Turbinia client command-line tool. - -Install via 'pip install turbinia-client' -""" -from setuptools import setup, find_packages -from pathlib import Path - -NAME = 'turbinia-client' -VERSION = '1.0.3' - -REQUIRES = ['click', 'turbinia-api-lib', 'google-auth-oauthlib', 'pandas'] - -this_directory = Path(__file__).parent -README = (this_directory / 'README.rst').read_text() - -setup( - name=NAME, version=VERSION, - description='Turbinia API Client command-line tool.', - long_description_content_type='text/markdown', - long_description=README, keywords=[ - 'Turbinia Client', 'Turbinia', 'Turbinia API Server' - ], python_requires='>=3.6', install_requires=REQUIRES, - packages=find_packages(), include_package_data=True, entry_points={ - 'console_scripts': [ - 'turbinia-client=turbinia_client.turbiniacli_tool:main' - ] - }, license='Apache License, Version 2.0', url='http://turbinia.plumbing/', - maintainer='Turbinia development team', - maintainer_email='turbinia-dev@googlegroups.com') diff --git a/turbinia/api/client/poetry.lock b/turbinia/api/client/poetry.lock new file mode 100644 index 000000000..d3fc8164b --- /dev/null +++ b/turbinia/api/client/poetry.lock @@ -0,0 +1,407 @@ +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "aenum" +version = "3.1.15" +description = "Advanced Enumerations (compatible with Python's stdlib Enum), NamedTuples, and NamedConstants" +optional = false +python-versions = "*" +files = [ + {file = "aenum-3.1.15-py2-none-any.whl", hash = "sha256:27b1710b9d084de6e2e695dab78fe9f269de924b51ae2850170ee7e1ca6288a5"}, + {file = "aenum-3.1.15-py3-none-any.whl", hash = "sha256:e0dfaeea4c2bd362144b87377e2c61d91958c5ed0b4daf89cb6f45ae23af6288"}, + {file = "aenum-3.1.15.tar.gz", hash = "sha256:8cbd76cd18c4f870ff39b24284d3ea028fbe8731a58df3aa581e434c575b9559"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "distlib" +version = "0.3.7" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, + {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.1.3" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "filelock" +version = "3.12.2" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.7" +files = [ + {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, + {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, +] + +[package.extras] +docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] + +[[package]] +name = "flake8" +version = "5.0.4" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.6.1" +files = [ + {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, + {file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=1.1.0,<4.3", markers = "python_version < \"3.8\""} +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.9.0,<2.10.0" +pyflakes = ">=2.5.0,<2.6.0" + +[[package]] +name = "importlib-metadata" +version = "4.2.0" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.6" +files = [ + {file = "importlib_metadata-4.2.0-py3-none-any.whl", hash = "sha256:057e92c15bc8d9e8109738a48db0ccb31b4d9d5cfbee5a8670879a30be66304b"}, + {file = "importlib_metadata-4.2.0.tar.gz", hash = "sha256:b7e52a1f8dec14a75ea73e0891f3060099ca1d8e6a462a4dff11c3e119ea1b31"}, +] + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" + +[package.extras] +docs = ["jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "sphinx"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pep517", "pyfakefs", "pytest (>=4.6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, +] + +[[package]] +name = "platformdirs" +version = "2.6.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-2.6.2-py3-none-any.whl", hash = "sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490"}, + {file = "platformdirs-2.6.2.tar.gz", hash = "sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.4", markers = "python_version < \"3.8\""} + +[package.extras] +docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] + +[[package]] +name = "pluggy" +version = "1.2.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] + +[[package]] +name = "pycodestyle" +version = "2.9.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, + {file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"}, +] + +[[package]] +name = "pydantic" +version = "1.10.13" +description = "Data validation and settings management using python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-1.10.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737"}, + {file = "pydantic-1.10.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17"}, + {file = "pydantic-1.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0"}, + {file = "pydantic-1.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0"}, + {file = "pydantic-1.10.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f"}, + {file = "pydantic-1.10.13-cp37-cp37m-win_amd64.whl", hash = "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953"}, + {file = "pydantic-1.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d"}, + {file = "pydantic-1.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d"}, + {file = "pydantic-1.10.13-py3-none-any.whl", hash = "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687"}, + {file = "pydantic-1.10.13.tar.gz", hash = "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340"}, +] + +[package.dependencies] +typing-extensions = ">=4.2.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + +[[package]] +name = "pyflakes" +version = "2.5.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, + {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, +] + +[[package]] +name = "pytest" +version = "7.4.2" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, + {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "tox" +version = "3.28.0" +description = "tox is a generic virtualenv management and test command line tool" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "tox-3.28.0-py2.py3-none-any.whl", hash = "sha256:57b5ab7e8bb3074edc3c0c0b4b192a4f3799d3723b2c5b76f1fa9f2d40316eea"}, + {file = "tox-3.28.0.tar.gz", hash = "sha256:d0d28f3fe6d6d7195c27f8b054c3e99d5451952b54abdae673b71609a581f640"}, +] + +[package.dependencies] +colorama = {version = ">=0.4.1", markers = "platform_system == \"Windows\""} +filelock = ">=3.0.0" +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +packaging = ">=14" +pluggy = ">=0.12.0" +py = ">=1.4.17" +six = ">=1.14.0" +tomli = {version = ">=2.0.1", markers = "python_version >= \"3.7\" and python_version < \"3.11\""} +virtualenv = ">=16.0.0,<20.0.0 || >20.0.0,<20.0.1 || >20.0.1,<20.0.2 || >20.0.2,<20.0.3 || >20.0.3,<20.0.4 || >20.0.4,<20.0.5 || >20.0.5,<20.0.6 || >20.0.6,<20.0.7 || >20.0.7" + +[package.extras] +docs = ["pygments-github-lexers (>=0.0.5)", "sphinx (>=2.0.0)", "sphinxcontrib-autoprogram (>=0.1.5)", "towncrier (>=18.5.0)"] +testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pathlib2 (>=2.3.3)", "psutil (>=5.6.1)", "pytest (>=4.0.0)", "pytest-cov (>=2.5.1)", "pytest-mock (>=1.10.0)", "pytest-randomly (>=1.0.0)"] + +[[package]] +name = "typing-extensions" +version = "4.7.1" +description = "Backported and Experimental Type Hints for Python 3.7+" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] + +[[package]] +name = "urllib3" +version = "1.26.18" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, + {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, +] + +[package.extras] +brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "virtualenv" +version = "20.16.2" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.6" +files = [ + {file = "virtualenv-20.16.2-py2.py3-none-any.whl", hash = "sha256:635b272a8e2f77cb051946f46c60a54ace3cb5e25568228bd6b57fc70eca9ff3"}, + {file = "virtualenv-20.16.2.tar.gz", hash = "sha256:0ef5be6d07181946891f5abc8047fda8bc2f0b4b9bf222c64e6e8963baee76db"}, +] + +[package.dependencies] +distlib = ">=0.3.1,<1" +filelock = ">=3.2,<4" +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +platformdirs = ">=2,<3" + +[package.extras] +docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] +testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "packaging (>=20.0)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)"] + +[[package]] +name = "zipp" +version = "3.15.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.7" +files = [ + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.7" +content-hash = "483f432eff7200b4124f271a2ff84465f66edc40b7afd7e2c6a46a87ec2d6cf4" diff --git a/turbinia/api/client/pyproject.toml b/turbinia/api/client/pyproject.toml index fa2452806..ee7ff10bd 100644 --- a/turbinia/api/client/pyproject.toml +++ b/turbinia/api/client/pyproject.toml @@ -1,18 +1,18 @@ [tool.poetry] -name = "turbinia_api_lib" -version = "1.0.0" +name = "turbinia-api-lib" +version = "1.0.2" description = "Turbinia API Server" authors = ["OpenAPI Generator Community "] license = "Apache License 2.0" readme = "README.md" -repository = "https://github.com/GIT_USER_ID/GIT_REPO_ID" +repository = "https://github.com/google/turbinia" keywords = ["OpenAPI", "OpenAPI-Generator", "Turbinia API Server"] include = ["turbinia_api_lib/py.typed"] [tool.poetry.dependencies] python = "^3.7" -urllib3 = ">= 1.25.3" +urllib3 = ">= 1.25.3, <2" python-dateutil = ">=2.8.2" pydantic = "^1.10.5, <2" aenum = ">=3.1.11" diff --git a/turbinia/api/client/setup.cfg b/turbinia/api/client/setup.cfg deleted file mode 100644 index 11433ee87..000000000 --- a/turbinia/api/client/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[flake8] -max-line-length=99 diff --git a/turbinia/api/client/setup.py b/turbinia/api/client/setup.py deleted file mode 100644 index 42a5c148d..000000000 --- a/turbinia/api/client/setup.py +++ /dev/null @@ -1,50 +0,0 @@ -# coding: utf-8 - -""" - Turbinia API Server - - Turbinia is an open-source framework for deploying, managing, and running distributed forensic workloads - - The version of the OpenAPI document: 1.0.0 - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from setuptools import setup, find_packages # noqa: H301 - -# To install the library, run the following -# -# python setup.py install -# -# prerequisite: setuptools -# http://pypi.python.org/pypi/setuptools -NAME = "turbinia-api-lib" -VERSION = "1.0.0" -PYTHON_REQUIRES = ">=3.7" -REQUIRES = [ - "urllib3 >= 1.25.3, < 2.1.0", - "python-dateutil", - "pydantic >= 1.10.5, < 2", - "aenum" -] - -setup( - name=NAME, - version=VERSION, - description="Turbinia API Server", - author="OpenAPI Generator community", - author_email="team@openapitools.org", - url="", - keywords=["OpenAPI", "OpenAPI-Generator", "Turbinia API Server"], - install_requires=REQUIRES, - packages=find_packages(exclude=["test", "tests"]), - include_package_data=True, - license="Apache License 2.0", - long_description_content_type='text/markdown', - long_description="""\ - Turbinia is an open-source framework for deploying, managing, and running distributed forensic workloads - """, # noqa: E501 - package_data={"turbinia_api_lib": ["py.typed"]}, -) diff --git a/turbinia/lib/utils.py b/turbinia/lib/utils.py index d48357014..9cdbb2ba7 100644 --- a/turbinia/lib/utils.py +++ b/turbinia/lib/utils.py @@ -44,6 +44,7 @@ def _image_export(command, output_dir, timeout=DEFAULT_TIMEOUT): """ # TODO: Consider using the exec helper to gather stdin/err. log.debug(f"Running image_export as [{' '.join(command):s}]") + try: subprocess.check_call(command, timeout=timeout) except subprocess.CalledProcessError as exception: From ac043cbd4cfd30e66d58ee07d0e8367868c5e3fe Mon Sep 17 00:00:00 2001 From: Aaron Peterson Date: Thu, 26 Oct 2023 06:11:56 -0700 Subject: [PATCH 09/10] Update report filtering (#1358) * Update report filtering * fix quotes * plumb through priority_filter * Set default to 80 * fix arg def * fix default * Sort/Uniq -c tasks * Update task count multiplier string --- .../api/cli/turbinia_client/core/commands.py | 15 +++- .../cli/turbinia_client/helpers/formatter.py | 69 ++++++++++++++----- 2 files changed, 62 insertions(+), 22 deletions(-) diff --git a/turbinia/api/cli/turbinia_client/core/commands.py b/turbinia/api/cli/turbinia_client/core/commands.py index db67ea47d..1ced5cf4e 100644 --- a/turbinia/api/cli/turbinia_client/core/commands.py +++ b/turbinia/api/cli/turbinia_client/core/commands.py @@ -120,13 +120,22 @@ def get_jobs(ctx: click.Context) -> None: @click.pass_context @click.argument('request_id') @click.option( - '--show_all', '-a', help='Shows all field regardless of priority.', + '--priority_filter', '-p', help='This sets what report sections are ' + 'shown in full detail in report output. Any tasks that have set a ' + 'report_priority value equal to or lower than this setting will be ' + 'shown in full detail, and tasks with a higher value will only have ' + 'a summary shown. The default is 20 which corresponds to "HIGH_PRIORITY"' + 'To see all tasks report output in full detail, set --priority_filter=100 ' + 'or to see CRITICAL only set --priority_filter=10', show_default=True, + default=20, type=int, required=False) +@click.option( + '--show_all', '-a', help='Shows all fields including saved output paths.', is_flag=True, required=False) @click.option( '--json_dump', '-j', help='Generates JSON output.', is_flag=True, required=False) def get_request( - ctx: click.Context, request_id: str, show_all: bool, + ctx: click.Context, request_id: str, priority_filter: int, show_all: bool, json_dump: bool) -> None: """Gets Turbinia request status.""" client: api_client.ApiClient = ctx.obj.api_client @@ -142,7 +151,7 @@ def get_request( formatter.echo_json(api_response) else: report = formatter.RequestMarkdownReport(api_response).generate_markdown( - show_all=show_all) + priority_filter=priority_filter, show_all=show_all) click.echo(report) except exceptions.ApiException as exception: log.error( diff --git a/turbinia/api/cli/turbinia_client/helpers/formatter.py b/turbinia/api/cli/turbinia_client/helpers/formatter.py index ef7e8d37b..bf90a3995 100644 --- a/turbinia/api/cli/turbinia_client/helpers/formatter.py +++ b/turbinia/api/cli/turbinia_client/helpers/formatter.py @@ -20,6 +20,7 @@ from abc import ABC, abstractmethod from click import echo as click_echo +from collections import defaultdict import logging import json import pandas @@ -271,7 +272,8 @@ def __init__(self, request_data: dict = None): super().__init__() self._request_data: dict = request_data - def generate_markdown(self, show_all=False, compact=False) -> str: + def generate_markdown( + self, priority_filter=None, show_all=False, compact=False) -> str: """Generate a markdown report.""" report: list[str] = [] task: dict = self._request_data @@ -280,6 +282,7 @@ def generate_markdown(self, show_all=False, compact=False) -> str: priority = task.get('report_priority') if task.get( 'report_priority') else MEDIUM_PRIORITY + priority_filter = priority_filter if priority_filter else HIGH_PRIORITY if priority <= CRITICAL_PRIORITY: name = f'{task.get("name")} ({"CRITICAL PRIORITY"})' @@ -291,16 +294,21 @@ def generate_markdown(self, show_all=False, compact=False) -> str: name = f'{task.get("name")} ({"LOW PRIORITY"})' try: - report.append(self.heading2(name)) - line = f"{self.bold('Evidence:'):s} {task.get('evidence_name')!s}" - report.append(self.bullet(line)) - line = f"{self.bold('Status:'):s} {task.get('status')!s}" - report.append(self.bullet(line)) - if show_all or priority <= MEDIUM_PRIORITY: + # Only show Task details if the Task has more priority than the + # priority_filter + if priority > priority_filter: + report.append(f'{self.heading2(name)}: {task.get("status")!s}') + else: + report.append(self.heading2(name)) + line = f"{self.bold('Evidence:'):s} {task.get('evidence_name')!s}" + report.append(self.bullet(line)) + line = f"{self.bold('Status:'):s} {task.get('status')!s}" + report.append(self.bullet(line)) + report.append(self.bullet(f"Task Id: {task.get('id')!s}")) report.append( self.bullet(f"Executed on worker {task.get('worker_name')!s}")) - if show_all or priority <= HIGH_PRIORITY: + if task.get('report_data'): if not compact: report.append('') @@ -308,7 +316,8 @@ def generate_markdown(self, show_all=False, compact=False) -> str: report.extend(task.get('report_data').splitlines()) if not compact: report.append('') - if show_all or priority <= CRITICAL_PRIORITY: + + if show_all and priority <= priority_filter: if not compact: report.append('') report.append(self.heading3('Saved Task Files:')) @@ -318,6 +327,8 @@ def generate_markdown(self, show_all=False, compact=False) -> str: report.append(self.bullet(self.code(path))) if not compact: report.append('') + else: + report.append('No saved files') report.append('') except TypeError as exception: log.warning(f'Error formatting the Markdown report: {exception!s}') @@ -335,10 +346,28 @@ def __init__(self, request_data: dict): self._request_data: dict = request_data sorted_tasks = sorted( - request_data.get('tasks'), key=lambda x: x['report_priority']) + request_data.get('tasks'), key=lambda x: + (x['report_priority'], x['name'])) tasks = [TaskMarkdownReport(task) for task in sorted_tasks] - self.add_components(tasks) + task_counter = defaultdict(int) + unique_tasks = [] + filtered_tasks = [] + + # Get unique tasks and task counts + for task in tasks: + task_counter[task] += 1 + if task not in unique_tasks: + unique_tasks.append(task) + + # Generate task list with counts + for task in unique_tasks: + if task_counter[task] > 1: + filtered_tasks.append(f'{task} ({task_counter[task]}x)') + else: + filtered_tasks.append(task) + + self.add_components(filtered_tasks) def add(self, component: MarkdownReportComponent) -> None: if component: @@ -355,7 +384,7 @@ def add_components(self, components: list[MarkdownReportComponent]) -> None: self.components.append(component) component.parent = self - def generate_markdown(self, show_all=False) -> str: + def generate_markdown(self, priority_filter=None, show_all=False) -> str: """Generates a Markdown version of Requests results.""" report: list[str] = [] request_dict: dict = self._request_data @@ -391,7 +420,9 @@ def generate_markdown(self, show_all=False) -> str: log.warning(f'Error formatting the Markdown report: {exception!s}') for task in self.components: - report.append(task.generate_markdown(show_all=show_all, compact=True)) + report.append( + task.generate_markdown( + priority_filter=priority_filter, show_all=show_all, compact=True)) self.report = '\n'.join(report) return self.report @@ -433,7 +464,7 @@ def __init__(self, workers_status: dict, days: int): def generate_markdown(self) -> str: """Generates a Markdown version of tasks per worker. - + Returns: markdown (str): Markdown version of tasks per worker. """ @@ -486,7 +517,7 @@ def __init__(self, statistics: dict): def stat_to_row(self, task: str, stat_dict: dict): """Generates a row of the statistics table. - + Args: task (str): Name of the current task. stat_dict (dict): Dictionary with information about current row. @@ -502,8 +533,8 @@ def generate_data_frame(self) -> pandas.DataFrame: Args: markdown (bool): Bool defining if the tasks should be in markdown format. - - Returns: + + Returns: data_frame (DataFrame): Statistics table in pandas DataFrame format. """ for stat_group, stat_dict in self._statistics.items(): @@ -520,7 +551,7 @@ def generate_data_frame(self) -> pandas.DataFrame: def generate_markdown(self) -> str: """Generates a Markdown version of task statistics. - + Returns: markdown(str): Markdown version of task statistics. """ @@ -532,7 +563,7 @@ def generate_markdown(self) -> str: def generate_csv(self) -> str: """Generates a CSV version of task statistics. - + Returns: csv(str): CSV version of task statistics. """ From d02a35a80eeeeafc373af6133ea9af2248f16bb3 Mon Sep 17 00:00:00 2001 From: Holzmano Lagrene Date: Wed, 1 Nov 2023 23:21:54 +0100 Subject: [PATCH 10/10] Upgrade bulk extractor (#1381) * Adding new functionality to BulkExtractorTask * Adding new evidence types to BulkExtractorJob * Applying Google Python Standard Style * Fixing error where Scan-Counter would be string instead of integer * removing test files * Adding REPORT_FILENAME constant * Checking if Pattern files actually exist and improve logging * Slimming cli command creation for pattern files using the F flag * Applying style rules * Adding comment for understandability of new TASK_CONFIG parameters. --- turbinia/jobs/bulk_extractor.py | 5 +- turbinia/workers/bulk_extractor.py | 98 ++++++++++++++++++++---------- 2 files changed, 69 insertions(+), 34 deletions(-) diff --git a/turbinia/jobs/bulk_extractor.py b/turbinia/jobs/bulk_extractor.py index feabbbd2f..89e777230 100644 --- a/turbinia/jobs/bulk_extractor.py +++ b/turbinia/jobs/bulk_extractor.py @@ -17,6 +17,8 @@ from __future__ import unicode_literals from turbinia.evidence import GoogleCloudDisk +from turbinia.evidence import Directory +from turbinia.evidence import CompressedDirectory from turbinia.evidence import GoogleCloudDiskRawEmbedded from turbinia.evidence import RawDisk from turbinia.evidence import EwfDisk @@ -35,7 +37,8 @@ class BulkExtractorJob(interface.TurbiniaJob): # The types of evidence that this Job will process evidence_input = [ - RawDisk, GoogleCloudDisk, GoogleCloudDiskRawEmbedded, EwfDisk + RawDisk, GoogleCloudDisk, GoogleCloudDiskRawEmbedded, EwfDisk, Directory, + CompressedDirectory ] evidence_output = [BulkExtractorOutput] diff --git a/turbinia/workers/bulk_extractor.py b/turbinia/workers/bulk_extractor.py index 7636c8814..845518ab2 100644 --- a/turbinia/workers/bulk_extractor.py +++ b/turbinia/workers/bulk_extractor.py @@ -14,20 +14,21 @@ # limitations under the License. """Task for running Bulk Extractor.""" -import os import logging +import os import xml.etree.ElementTree as xml_tree -from turbinia import config from turbinia import TurbiniaException - +from turbinia import config from turbinia.evidence import BulkExtractorOutput from turbinia.evidence import EvidenceState as state -from turbinia.workers import TurbiniaTask from turbinia.lib import text_formatter as fmt +from turbinia.workers import TurbiniaTask log = logging.getLogger('turbinia') +REPORT_FILENAME = "report.md" + class BulkExtractorTask(TurbiniaTask): """Task to generate Bulk Extractor output.""" @@ -36,19 +37,21 @@ class BulkExtractorTask(TurbiniaTask): TASK_CONFIG = { # These are extra arguments passed when running bulk_extractor - 'bulk_extractor_args': None + 'bulk_extractor_args': None, + # List of paths that contain any sort of regex divided by newline. These files must be accessible to the workers. + 'regex_pattern_files': [] } def run(self, evidence, result): """Run Bulk Extractor binary. - Args: - evidence (Evidence object): The evidence we will process. - result (TurbiniaTaskResult): The object to place task results into. + Args: + evidence (Evidence object): The evidence we will process. + result (TurbiniaTaskResult): The object to place task results into. - Returns: - TurbiniaTaskResult object. - """ + Returns: + TurbiniaTaskResult object. + """ config.LoadConfig() # TODO(wyassine): Research whether bulk extractor has an option to @@ -59,6 +62,7 @@ def run(self, evidence, result): # Create a path that we can write the new file to. base_name = os.path.basename(evidence.local_path) output_file_path = os.path.join(self.output_dir, base_name) + report_path = os.path.join(self.output_dir, REPORT_FILENAME) # Add the output path to the evidence so we can automatically save it # later. output_evidence.local_path = output_file_path @@ -73,14 +77,33 @@ def run(self, evidence, result): else: bulk_extractor_args = None + regex_pattern_file_paths = [] + if self.task_config.get('regex_pattern_files'): + for regex_pattern_file_path in self.task_config.get( + 'regex_pattern_files'): + if os.path.exists(regex_pattern_file_path): + regex_pattern_file_paths.append(regex_pattern_file_path) + if regex_pattern_file_paths: + result.log( + f"{len(regex_pattern_file_paths):} valid Pattern Files detected.") + try: # Generate the command we want to run then execute. cmd = ['bulk_extractor'] + # if evidence type is Directory we need to add an -R parameter to the command + if evidence.type == "Directory" or evidence.type == "CompressedDirectory": + result.log( + f"Running Bulk Extractor against {evidence.type:s} by using -R Flag." + ) + cmd.extend(['-R']) cmd.extend(['-o', output_file_path]) if bulk_extractor_args: cmd.extend(bulk_extractor_args) + if regex_pattern_file_paths: + for regex_pattern_file_path in regex_pattern_file_paths: + cmd.extend(['-F', regex_pattern_file_path]) cmd.append(evidence.local_path) @@ -92,6 +115,9 @@ def run(self, evidence, result): output_evidence.text_data = report result.report_data = output_evidence.text_data + with open(report_path, 'wb') as fh: + fh.write(output_evidence.text_data.encode('utf-8')) + # Compress the bulk extractor output directory. output_evidence.compress() result.close(self, success=True, status=summary) @@ -103,12 +129,12 @@ def run(self, evidence, result): def check_xml_attrib(self, xml_key): """Checks if a key exists within the xml report. - Args: - xml_key(str): the xml key to check for. + Args: + xml_key(str): the xml key to check for. - Returns: - xml_hit(str): the xml value else return N/A. - """ + Returns: + xml_hit(str): the xml value else return N/A. + """ xml_hit = 'N/A' xml_search = self.xml.find(xml_key) @@ -120,14 +146,14 @@ def check_xml_attrib(self, xml_key): def generate_summary_report(self, output_file_path): """Generate a summary report from the resulting bulk extractor run. - Args: - output_file_path(str): the path to the bulk extractor output. + Args: + output_file_path(str): the path to the bulk extractor output. - Returns: - tuple: containing: - report_test(str): The report data - summary(str): A summary of the report (used for task status) - """ + Returns: + tuple: containing: + report_test(str): The report data + summary(str): A summary of the report (used for task status) + """ findings = [] features_count = 0 report_path = os.path.join(output_file_path, 'report.xml') @@ -166,17 +192,23 @@ def generate_summary_report(self, output_file_path): f"Elapsed Time: {self.check_xml_attrib('report/elapsed_seconds')}" )) - # Retrieve results from each of the scanner runs - feature_files = self.xml.find('feature_files') + # Retrieve results from each of the scanner runs and display in table + feature_files = self.xml.find(".//feature_files") + scanner_results = [] if feature_files is not None: - feature_iter = feature_files.iter() - findings.append(fmt.heading5('Scanner Results')) - for f in feature_iter: - if f.tag == 'feature_file': - name = next(feature_iter) - count = next(feature_iter) - findings.append(fmt.bullet(f'{name.text}:{count.text}')) - features_count += int(count.text) + findings.append(fmt.heading5('Scanner Results\n')) + for name, count in zip(self.xml.findall(".//feature_file/name"), + self.xml.findall(".//feature_file/count")): + scanner_results.append({"Name": name.text, "Count": int(count.text)}) + features_count += int(count.text) + sorted_scanner_results = sorted( + scanner_results, key=lambda x: x["Count"], reverse=True) + columns = scanner_results[0].keys() + findings.append(" | ".join(columns)) + findings.append(" | ".join(["---"] * len(columns))) + for scanner_result in sorted_scanner_results: + findings.append( + " | ".join(str(scanner_result[column]) for column in columns)) else: findings.append(fmt.heading5("There are no findings to report.")) except AttributeError as exception: