ob-metaflow-extensions 1.1.167__tar.gz → 1.1.168__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ob-metaflow-extensions might be problematic. Click here for more details.
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/PKG-INFO +1 -1
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/__init__.py +25 -32
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/ob_metaflow_extensions.egg-info/PKG-INFO +1 -1
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/setup.py +1 -1
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/README.md +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/config/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/apps/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/apps/app_utils.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/apps/consts.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/apps/deploy_decorator.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/apps/supervisord_utils.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/auth_server.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/aws/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/aws/assume_role.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/aws/assume_role_decorator.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/card_utilities/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/card_utilities/async_cards.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/card_utilities/extra_components.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/card_utilities/injector.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/checkpoint_datastores/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/checkpoint_datastores/coreweave.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/checkpoint_datastores/nebius.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/fast_bakery/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/fast_bakery/docker_environment.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery_cli.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/fast_bakery/fast_bakery_decorator.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/kubernetes/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/kubernetes/kubernetes_client.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/kubernetes/pod_killer.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nim/card.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nim/nim_decorator.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nim/nim_manager.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nim/utils.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nvcf/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nvcf/constants.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nvcf/exceptions.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nvcf/heartbeat_store.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nvcf/nvcf.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nvcf/nvcf_cli.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nvcf/nvcf_decorator.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nvcf/utils.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nvct/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nvct/exceptions.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nvct/nvct.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nvct/nvct_cli.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nvct/nvct_decorator.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nvct/nvct_runner.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/nvct/utils.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/ollama/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/ollama/constants.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/ollama/exceptions.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/ollama/ollama.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/ollama/status_card.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/perimeters.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/profilers/deco_injector.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/profilers/gpu_profile_decorator.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/secrets/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/secrets/secrets.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/snowflake/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/snowflake/snowflake.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/snowpark/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_cli.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_client.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_decorator.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_exceptions.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_job.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/snowpark/snowpark_service_spec.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/tensorboard/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/torchtune/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/vllm/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/vllm/constants.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/vllm/exceptions.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/vllm/status_card.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/plugins/vllm/vllm_manager.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/profilers/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/profilers/gpu.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/remote_config.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/toplevel/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/toplevel/global_aliases_for_metaflow_package.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/toplevel/plugins/azure/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/toplevel/plugins/gcp/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/toplevel/plugins/kubernetes/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/toplevel/plugins/ollama/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/toplevel/plugins/snowflake/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/toplevel/plugins/torchtune/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/metaflow_extensions/outerbounds/toplevel/plugins/vllm/__init__.py +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/ob_metaflow_extensions.egg-info/SOURCES.txt +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/ob_metaflow_extensions.egg-info/dependency_links.txt +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/ob_metaflow_extensions.egg-info/requires.txt +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/ob_metaflow_extensions.egg-info/top_level.txt +0 -0
- {ob_metaflow_extensions-1.1.167 → ob_metaflow_extensions-1.1.168}/setup.cfg +0 -0
|
@@ -52,10 +52,6 @@ def get_boto3_session(role_arn=None, session_vars=None):
|
|
|
52
52
|
|
|
53
53
|
token_info = get_token("/generate/aws")
|
|
54
54
|
|
|
55
|
-
# Check if the assume_role decorator has set a role ARN via environment variable
|
|
56
|
-
# This takes precedence over CSPR role
|
|
57
|
-
decorator_role_arn = os.environ.get(OBP_ASSUME_ROLE_ARN_ENV_VAR)
|
|
58
|
-
|
|
59
55
|
# Write token to a file. The file name is derived from the user name
|
|
60
56
|
# so it works with multiple users on the same machine.
|
|
61
57
|
#
|
|
@@ -76,13 +72,18 @@ def get_boto3_session(role_arn=None, session_vars=None):
|
|
|
76
72
|
if token_info.get("cspr_role_arn"):
|
|
77
73
|
cspr_role = token_info["cspr_role_arn"]
|
|
78
74
|
|
|
79
|
-
#
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
75
|
+
# Check if the assume_role decorator has set a CSPR ARN via environment variable
|
|
76
|
+
# This takes precedence over CSPR role that comes from the token_info response
|
|
77
|
+
decorator_role_arn = os.environ.get(OBP_ASSUME_ROLE_ARN_ENV_VAR)
|
|
78
|
+
if decorator_role_arn:
|
|
79
|
+
cspr_role = decorator_role_arn
|
|
80
|
+
|
|
81
|
+
if cspr_role:
|
|
82
|
+
# If CSPR role is set, we set it as the default role to assume
|
|
83
|
+
# for the AWS SDK. We do this by writing an AWS config file
|
|
83
84
|
# with two profiles. One to get credentials for the task role
|
|
84
85
|
# in exchange for the OIDC token, and second to assume the
|
|
85
|
-
#
|
|
86
|
+
# CSPR role using the task role credentials.
|
|
86
87
|
import configparser
|
|
87
88
|
from io import StringIO
|
|
88
89
|
|
|
@@ -94,9 +95,9 @@ def get_boto3_session(role_arn=None, session_vars=None):
|
|
|
94
95
|
"web_identity_token_file": token_file,
|
|
95
96
|
}
|
|
96
97
|
|
|
97
|
-
#
|
|
98
|
-
aws_config["profile
|
|
99
|
-
"role_arn":
|
|
98
|
+
# CSPR role profile (default)
|
|
99
|
+
aws_config["profile cspr"] = {
|
|
100
|
+
"role_arn": cspr_role,
|
|
100
101
|
"source_profile": "task",
|
|
101
102
|
}
|
|
102
103
|
|
|
@@ -112,7 +113,7 @@ def get_boto3_session(role_arn=None, session_vars=None):
|
|
|
112
113
|
tmp_aws_config_file = f.name
|
|
113
114
|
os.rename(tmp_aws_config_file, aws_config_file)
|
|
114
115
|
os.environ["AWS_CONFIG_FILE"] = aws_config_file
|
|
115
|
-
os.environ["AWS_PROFILE"] = "
|
|
116
|
+
os.environ["AWS_PROFILE"] = "cspr"
|
|
116
117
|
else:
|
|
117
118
|
os.environ["AWS_WEB_IDENTITY_TOKEN_FILE"] = token_file
|
|
118
119
|
os.environ["AWS_ROLE_ARN"] = token_info["role_arn"]
|
|
@@ -124,29 +125,21 @@ def get_boto3_session(role_arn=None, session_vars=None):
|
|
|
124
125
|
if token_info.get("region"):
|
|
125
126
|
os.environ["AWS_DEFAULT_REGION"] = token_info["region"]
|
|
126
127
|
|
|
127
|
-
if
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
#
|
|
132
|
-
session = boto3.session.Session(profile_name="
|
|
128
|
+
if cspr_role:
|
|
129
|
+
# The generated AWS config will be used here since we set the
|
|
130
|
+
# AWS_CONFIG_FILE environment variable above.
|
|
131
|
+
if role_arn == USE_CSPR_ROLE_ARN_IF_SET:
|
|
132
|
+
# Otherwise start from the default profile, assuming CSPR role
|
|
133
|
+
session = boto3.session.Session(profile_name="cspr")
|
|
133
134
|
else:
|
|
134
135
|
session = boto3.session.Session(profile_name="task")
|
|
135
136
|
else:
|
|
136
|
-
# No decorator role or CSPR role, use default session
|
|
137
137
|
# Not using AWS config, just AWS_WEB_IDENTITY_TOKEN_FILE + AWS_ROLE_ARN
|
|
138
138
|
session = boto3.session.Session()
|
|
139
139
|
|
|
140
|
-
if
|
|
141
|
-
role_arn
|
|
142
|
-
|
|
143
|
-
and role_arn != decorator_role_arn
|
|
144
|
-
):
|
|
145
|
-
# If the user provided a role_arn that's different from the decorator role,
|
|
146
|
-
# we assume that role using the current session credentials.
|
|
147
|
-
# This works for both cases:
|
|
148
|
-
# 1. No decorator role: Task role -> Secrets role
|
|
149
|
-
# 2. With decorator role: Decorator role -> Secrets role
|
|
140
|
+
if role_arn and role_arn != USE_CSPR_ROLE_ARN_IF_SET:
|
|
141
|
+
# If the user provided a role_arn, we assume that role
|
|
142
|
+
# using the task role credentials. CSPR role is not used.
|
|
150
143
|
fetcher = botocore.credentials.AssumeRoleCredentialFetcher(
|
|
151
144
|
client_creator=session._session.create_client,
|
|
152
145
|
source_credentials=session._session.get_credentials(),
|
|
@@ -162,8 +155,8 @@ def get_boto3_session(role_arn=None, session_vars=None):
|
|
|
162
155
|
else:
|
|
163
156
|
# If the user didn't provide a role_arn, or if the role_arn
|
|
164
157
|
# is set to USE_CSPR_ROLE_ARN_IF_SET, we return the default
|
|
165
|
-
# session which would use the
|
|
166
|
-
#
|
|
158
|
+
# session which would use the CSPR role if it is set on the
|
|
159
|
+
# server, and the task role otherwise.
|
|
167
160
|
return session
|
|
168
161
|
|
|
169
162
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|