mainsequence 4.0.12__tar.gz → 4.0.13__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.
- {mainsequence-4.0.12 → mainsequence-4.0.13}/PKG-INFO +1 -1
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/data_nodes/build_operations.py +14 -2
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence.egg-info/PKG-INFO +1 -1
- {mainsequence-4.0.12 → mainsequence-4.0.13}/pyproject.toml +1 -1
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_build_operations_hashing.py +19 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/LICENSE +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/README.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/AGENTS.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/a2a_communication/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/application_surfaces/api_surfaces/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/command_center/adapter_from_api/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/command_center/api_mock_prototyping/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/command_center/app_components/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/command_center/connections/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/command_center/workspace_analysis/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/command_center/workspace_builder/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/command_center/workspace_design/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/dashboards/streamlit/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/data_access/exploration/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/data_publishing/data_nodes/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/data_publishing/meta_tables/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/ms-markets/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/platform_operations/access_control_and_sharing/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/platform_operations/orchestration_and_releases/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/project_builder/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/project_to_agent/SKILL.md +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/__init__.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/__main__.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/bootstrap.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/cli/__init__.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/cli/api.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/cli/browser_auth.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/cli/cli.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/cli/config.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/cli/docker_utils.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/cli/doctor.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/cli/local_ops.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/cli/model_filters.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/cli/project_status.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/cli/pydantic_cli.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/cli/sdk_utils.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/cli/ssh_utils.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/cli/ui.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/__init__.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/agent_runtime_models.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/base.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/client.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/command_center/__init__.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/command_center/app_component.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/command_center/connections.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/command_center/data_models.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/command_center/workspace.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/command_center/workspace_snapshot.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/data_sources_interfaces/__init__.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/data_sources_interfaces/duckdb.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/data_sources_interfaces/sqlite.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/exceptions.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/fastapi/__init__.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/fastapi/auth.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/models_helpers.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/models_metatables.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/models_tdag.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/models_user.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/utils.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/compute_validation.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/defaults.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/instrumentation/__init__.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/instrumentation/utils.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/logconf.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/runtime_flags.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/__init__.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/__main__.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/base_persist_managers.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/config.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/configuration_models.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/data_nodes/__init__.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/data_nodes/data_nodes.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/data_nodes/filters.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/data_nodes/models.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/data_nodes/namespacing.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/data_nodes/persist_managers.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/data_nodes/run_operations.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/data_nodes/utils.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/filters.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/future_registry.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/meta_tables/__init__.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/meta_tables/compiled_sql.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/meta_tables/hashing.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/meta_tables/sqlalchemy_contracts.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/pydantic_metadata.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/utils.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence.egg-info/SOURCES.txt +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence.egg-info/dependency_links.txt +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence.egg-info/entry_points.txt +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence.egg-info/requires.txt +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence.egg-info/top_level.txt +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/setup.cfg +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_auth_precedence.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_cli.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_cli_browser_auth.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_client.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_command_center_app_component_models.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_command_center_data_models.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_command_center_models.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_data_access_mixin_dimension_audit.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_data_node_search_join_filters.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_data_node_storage_dimension_queries.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_data_node_update_flow.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_dependency_extras.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_duckdb_interface_dimensions.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_filter_normalization.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_logconf.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_meta_tables_client_models.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_meta_tables_sqlalchemy_contracts.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_models_user_request_bound_auth.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_pod_project_resolution.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_project_batch_jobs_from_file.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_run_configuration.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_secret_client_model.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_source_table_configuration.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_sqlite_interface_dimensions.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_update_runner_uid_runtime.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_update_statistics.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_update_uid_guards.py +0 -0
- {mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_workspace_snapshot.py +0 -0
{mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/data_nodes/build_operations.py
RENAMED
|
@@ -41,6 +41,9 @@ if TYPE_CHECKING:
|
|
|
41
41
|
|
|
42
42
|
build_model = lambda model_data: get_model_class(model_data["orm_class"])(**model_data)
|
|
43
43
|
|
|
44
|
+
POSTGRES_IDENTIFIER_MAX_LENGTH = 63
|
|
45
|
+
_HASH_SUFFIX_LENGTH = 33
|
|
46
|
+
|
|
44
47
|
|
|
45
48
|
# 1. Create a "registry" function using the decorator
|
|
46
49
|
@singledispatch
|
|
@@ -533,6 +536,15 @@ def extract_pydantic_fields_from_dict(d: Mapping[str, Any]) -> dict[str, dict[st
|
|
|
533
536
|
return result
|
|
534
537
|
|
|
535
538
|
|
|
539
|
+
def _crop_hash_prefix(prefix: str, *, max_length: int = POSTGRES_IDENTIFIER_MAX_LENGTH) -> str:
|
|
540
|
+
max_prefix_length = max_length - _HASH_SUFFIX_LENGTH
|
|
541
|
+
if max_prefix_length <= 0:
|
|
542
|
+
raise ValueError("max_length must leave room for '_' plus the hash suffix.")
|
|
543
|
+
|
|
544
|
+
cropped_prefix = prefix[:max_prefix_length].rstrip("_")
|
|
545
|
+
return cropped_prefix or "hash"
|
|
546
|
+
|
|
547
|
+
|
|
536
548
|
def create_config(
|
|
537
549
|
ts_class_name: str,
|
|
538
550
|
kwargs: dict[str, Any],
|
|
@@ -562,8 +574,8 @@ def create_config(
|
|
|
562
574
|
# 4. Create the remote configuration by removing ignored keys
|
|
563
575
|
remote_config = copy.deepcopy(dict_to_hash)
|
|
564
576
|
|
|
565
|
-
update_prefix = (update_hash_prefix or ts_class_name).lower()
|
|
566
|
-
storage_prefix = (storage_hash_prefix or ts_class_name).lower()
|
|
577
|
+
update_prefix = _crop_hash_prefix((update_hash_prefix or ts_class_name).lower())
|
|
578
|
+
storage_prefix = _crop_hash_prefix((storage_hash_prefix or ts_class_name).lower())
|
|
567
579
|
|
|
568
580
|
# 5. Return all computed values in the structured dataclass
|
|
569
581
|
return TimeSerieConfig(
|
|
@@ -24,6 +24,25 @@ def _hashes(payload):
|
|
|
24
24
|
return build_operations.hash_signature({"config": serialized_payload})
|
|
25
25
|
|
|
26
26
|
|
|
27
|
+
def test_create_config_crops_hash_prefix_to_postgres_identifier_limit(monkeypatch):
|
|
28
|
+
monkeypatch.setattr(build_operations, "POD_PROJECT", None, raising=False)
|
|
29
|
+
|
|
30
|
+
class_name = "VeryLongDataNodeClassNameThatWouldOverflowPostgresIdentifierLimit"
|
|
31
|
+
|
|
32
|
+
config = build_operations.create_config(
|
|
33
|
+
ts_class_name=class_name,
|
|
34
|
+
kwargs={"identifier": "prices"},
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
expected_prefix = class_name.lower()[:30].rstrip("_")
|
|
38
|
+
assert len(config.storage_hash) == 63
|
|
39
|
+
assert len(config.update_hash) == 63
|
|
40
|
+
assert config.storage_hash.startswith(f"{expected_prefix}_")
|
|
41
|
+
assert config.update_hash.startswith(f"{expected_prefix}_")
|
|
42
|
+
assert len(config.storage_hash.rsplit("_", 1)[1]) == 32
|
|
43
|
+
assert len(config.update_hash.rsplit("_", 1)[1]) == 32
|
|
44
|
+
|
|
45
|
+
|
|
27
46
|
def test_nested_pydantic_runtime_only_fields_inside_lists_do_not_affect_hashes(monkeypatch):
|
|
28
47
|
monkeypatch.setattr(build_operations, "POD_PROJECT", None, raising=False)
|
|
29
48
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/a2a_communication/SKILL.md
RENAMED
|
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
|
{mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/dashboards/streamlit/SKILL.md
RENAMED
|
File without changes
|
{mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/data_access/exploration/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-4.0.12 → mainsequence-4.0.13}/agent_scaffold/skills/maintenance/bug_auditor/SKILL.md
RENAMED
|
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
|
{mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/command_center/app_component.py
RENAMED
|
File without changes
|
{mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/command_center/connections.py
RENAMED
|
File without changes
|
{mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/command_center/data_models.py
RENAMED
|
File without changes
|
|
File without changes
|
{mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/command_center/workspace_snapshot.py
RENAMED
|
File without changes
|
{mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/data_sources_interfaces/__init__.py
RENAMED
|
File without changes
|
{mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/data_sources_interfaces/duckdb.py
RENAMED
|
File without changes
|
{mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/client/data_sources_interfaces/sqlite.py
RENAMED
|
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
|
{mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/data_nodes/persist_managers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-4.0.12 → mainsequence-4.0.13}/mainsequence/tdag/meta_tables/sqlalchemy_contracts.py
RENAMED
|
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
|
{mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_command_center_app_component_models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mainsequence-4.0.12 → mainsequence-4.0.13}/tests/test_data_node_storage_dimension_queries.py
RENAMED
|
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
|