ocrd 3.0.0b3__tar.gz → 3.0.0b4__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.
Files changed (155) hide show
  1. {ocrd-3.0.0b3/src/ocrd.egg-info → ocrd-3.0.0b4}/PKG-INFO +1 -1
  2. ocrd-3.0.0b4/VERSION +1 -0
  3. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/processor/base.py +16 -13
  4. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/workspace.py +4 -1
  5. {ocrd-3.0.0b3 → ocrd-3.0.0b4/src/ocrd.egg-info}/PKG-INFO +1 -1
  6. ocrd-3.0.0b3/VERSION +0 -1
  7. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/LICENSE +0 -0
  8. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/MANIFEST.in +0 -0
  9. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/README.md +0 -0
  10. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/README_bashlib.md +0 -0
  11. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/README_ocrd.md +0 -0
  12. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/README_ocrd_modelfactory.md +0 -0
  13. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/README_ocrd_models.md +0 -0
  14. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/README_ocrd_network.md +0 -0
  15. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/README_ocrd_utils.md +0 -0
  16. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/README_ocrd_validators.md +0 -0
  17. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/pyproject.toml +0 -0
  18. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/requirements.txt +0 -0
  19. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/setup.cfg +0 -0
  20. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/__init__.py +0 -0
  21. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/cli/__init__.py +0 -0
  22. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/cli/bashlib.py +0 -0
  23. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/cli/log.py +0 -0
  24. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/cli/network.py +0 -0
  25. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/cli/ocrd_tool.py +0 -0
  26. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/cli/process.py +0 -0
  27. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/cli/resmgr.py +0 -0
  28. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/cli/validate.py +0 -0
  29. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/cli/workspace.py +0 -0
  30. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/cli/zip.py +0 -0
  31. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/constants.py +0 -0
  32. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/decorators/__init__.py +0 -0
  33. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/decorators/loglevel_option.py +0 -0
  34. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/decorators/mets_find_options.py +0 -0
  35. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/decorators/ocrd_cli_options.py +0 -0
  36. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/decorators/parameter_option.py +0 -0
  37. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/lib.bash +0 -0
  38. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/mets_server.py +0 -0
  39. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/ocrd-all-tool.json +0 -0
  40. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/processor/__init__.py +0 -0
  41. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/processor/builtin/__init__.py +0 -0
  42. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/processor/builtin/dummy/__init__.py +0 -0
  43. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/processor/builtin/dummy/ocrd-tool.json +0 -0
  44. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/processor/builtin/dummy_processor.py +0 -0
  45. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/processor/helpers.py +0 -0
  46. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/processor/ocrd_page_result.py +0 -0
  47. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/resolver.py +0 -0
  48. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/resource_list.yml +0 -0
  49. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/resource_manager.py +0 -0
  50. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/task_sequence.py +0 -0
  51. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/workspace_backup.py +0 -0
  52. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd/workspace_bagger.py +0 -0
  53. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd.egg-info/SOURCES.txt +0 -0
  54. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd.egg-info/dependency_links.txt +0 -0
  55. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd.egg-info/entry_points.txt +0 -0
  56. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd.egg-info/requires.txt +0 -0
  57. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd.egg-info/top_level.txt +0 -0
  58. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_modelfactory/__init__.py +0 -0
  59. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_models/__init__.py +0 -0
  60. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_models/constants.py +0 -0
  61. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_models/mets-empty.xml +0 -0
  62. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_models/ocrd_agent.py +0 -0
  63. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_models/ocrd_exif.py +0 -0
  64. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_models/ocrd_file.py +0 -0
  65. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_models/ocrd_mets.py +0 -0
  66. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_models/ocrd_page.py +0 -0
  67. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_models/ocrd_page_generateds.py +0 -0
  68. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_models/ocrd_xml_base.py +0 -0
  69. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_models/report.py +0 -0
  70. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_models/utils.py +0 -0
  71. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/__init__.py +0 -0
  72. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/cli/__init__.py +0 -0
  73. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/cli/client.py +0 -0
  74. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/cli/processing_server.py +0 -0
  75. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/cli/processing_worker.py +0 -0
  76. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/cli/processor_server.py +0 -0
  77. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/client.py +0 -0
  78. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/client_utils.py +0 -0
  79. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/constants.py +0 -0
  80. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/database.py +0 -0
  81. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/logging_utils.py +0 -0
  82. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/models/__init__.py +0 -0
  83. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/models/job.py +0 -0
  84. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/models/messages.py +0 -0
  85. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/models/ocrd_tool.py +0 -0
  86. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/models/workflow.py +0 -0
  87. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/models/workspace.py +0 -0
  88. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/param_validators.py +0 -0
  89. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/process_helpers.py +0 -0
  90. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/processing_server.py +0 -0
  91. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/processing_worker.py +0 -0
  92. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/processor_server.py +0 -0
  93. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/rabbitmq_utils/__init__.py +0 -0
  94. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/rabbitmq_utils/connector.py +0 -0
  95. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/rabbitmq_utils/constants.py +0 -0
  96. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/rabbitmq_utils/consumer.py +0 -0
  97. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/rabbitmq_utils/helpers.py +0 -0
  98. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/rabbitmq_utils/ocrd_messages.py +0 -0
  99. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/rabbitmq_utils/publisher.py +0 -0
  100. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/runtime_data/__init__.py +0 -0
  101. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/runtime_data/config_parser.py +0 -0
  102. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/runtime_data/connection_clients.py +0 -0
  103. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/runtime_data/deployer.py +0 -0
  104. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/runtime_data/hosts.py +0 -0
  105. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/runtime_data/network_agents.py +0 -0
  106. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/runtime_data/network_services.py +0 -0
  107. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/server_cache.py +0 -0
  108. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/server_utils.py +0 -0
  109. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/tcp_to_uds_mets_proxy.py +0 -0
  110. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_network/utils.py +0 -0
  111. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_utils/__init__.py +0 -0
  112. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_utils/config.py +0 -0
  113. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_utils/constants.py +0 -0
  114. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_utils/deprecate.py +0 -0
  115. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_utils/image.py +0 -0
  116. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_utils/introspect.py +0 -0
  117. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_utils/logging.py +0 -0
  118. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_utils/ocrd_logging.conf +0 -0
  119. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_utils/os.py +0 -0
  120. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_utils/str.py +0 -0
  121. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/__init__.py +0 -0
  122. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/bagit-profile.yml +0 -0
  123. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/constants.py +0 -0
  124. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/json_validator.py +0 -0
  125. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/message_processing.schema.yml +0 -0
  126. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/message_result.schema.yml +0 -0
  127. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/mets.xsd +0 -0
  128. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/ocrd_network_message_validator.py +0 -0
  129. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/ocrd_tool.schema.yml +0 -0
  130. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/ocrd_tool_validator.py +0 -0
  131. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/ocrd_zip_validator.py +0 -0
  132. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/page.xsd +0 -0
  133. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/page_validator.py +0 -0
  134. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/parameter_validator.py +0 -0
  135. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/processing_server_config.schema.yml +0 -0
  136. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/processing_server_config_validator.py +0 -0
  137. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/resource_list_validator.py +0 -0
  138. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/workspace_validator.py +0 -0
  139. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/xlink.xsd +0 -0
  140. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/xsd_mets_validator.py +0 -0
  141. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/xsd_page_validator.py +0 -0
  142. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/src/ocrd_validators/xsd_validator.py +0 -0
  143. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/tests/test_decorators.py +0 -0
  144. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/tests/test_logging.py +0 -0
  145. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/tests/test_logging_conf.py +0 -0
  146. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/tests/test_mets_server.py +0 -0
  147. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/tests/test_model_factory.py +0 -0
  148. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/tests/test_resolver.py +0 -0
  149. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/tests/test_resolver_oai.py +0 -0
  150. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/tests/test_resource_manager.py +0 -0
  151. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/tests/test_task_sequence.py +0 -0
  152. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/tests/test_utils.py +0 -0
  153. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/tests/test_version.py +0 -0
  154. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/tests/test_workspace.py +0 -0
  155. {ocrd-3.0.0b3 → ocrd-3.0.0b4}/tests/test_workspace_remove.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ocrd
3
- Version: 3.0.0b3
3
+ Version: 3.0.0b4
4
4
  Summary: OCR-D framework
5
5
  Author-email: Konstantin Baierer <unixprog@gmail.com>
6
6
  License: Apache License 2.0
ocrd-3.0.0b4/VERSION ADDED
@@ -0,0 +1 @@
1
+ 3.0.0b4
@@ -166,11 +166,14 @@ class Processor():
166
166
 
167
167
  (Override if ``ocrd-tool.json`` is not distributed with the Python package.)
168
168
  """
169
- # XXX HACK
170
- module_tokens = self.__module__.split('.')
171
- if module_tokens[0] == 'src':
172
- module_tokens.pop(0)
173
- return resource_filename(module_tokens[0], self.metadata_filename)
169
+ module = inspect.getmodule(self)
170
+ module_tokens = module.__package__.split('.')
171
+ # for namespace packages, we cannot just use the first token
172
+ for i in range(len(module_tokens)):
173
+ prefix = '.'.join(module_tokens[:i + 1])
174
+ if sys.modules[prefix].__spec__.has_location:
175
+ return resource_filename(prefix, self.metadata_filename)
176
+ raise Exception("cannot find top-level module prefix for %s", module.__package__)
174
177
 
175
178
  @cached_property
176
179
  def metadata_rawdict(self) -> dict:
@@ -455,17 +458,17 @@ class Processor():
455
458
  nr_copied = 0
456
459
 
457
460
  # set up multithreading
458
- if self.max_workers <= 0:
459
- max_workers = max(0, config.OCRD_MAX_PARALLEL_PAGES)
460
- else:
461
- max_workers = max(0, min(config.OCRD_MAX_PARALLEL_PAGES, self.max_workers))
461
+ max_workers = max(0, config.OCRD_MAX_PARALLEL_PAGES)
462
+ if self.max_workers > 0 and self.max_workers < config.OCRD_MAX_PARALLEL_PAGES:
463
+ self._base_logger.info("limiting number of threads from %d to %d", max_workers, self.max_workers)
464
+ max_workers = self.max_workers
462
465
  if max_workers > 1:
463
466
  assert isinstance(workspace.mets, ClientSideOcrdMets), \
464
467
  "OCRD_MAX_PARALLEL_PAGES>1 requires also using --mets-server-url"
465
- if self.max_page_seconds <= 0:
466
- max_seconds = max(0, config.OCRD_PROCESSING_PAGE_TIMEOUT)
467
- else:
468
- max_seconds = max(0, min(config.OCRD_PROCESSING_PAGE_TIMEOUT, self.max_page_seconds))
468
+ max_seconds = max(0, config.OCRD_PROCESSING_PAGE_TIMEOUT)
469
+ if self.max_page_seconds > 0 and self.max_page_seconds < config.OCRD_PROCESSING_PAGE_TIMEOUT:
470
+ self._base_logger.info("limiting page timeout from %d to %d sec", max_seconds, self.max_page_seconds)
471
+ max_seconds = self.max_page_seconds
469
472
  executor = ThreadPoolExecutor(
470
473
  max_workers=max_workers or 1,
471
474
  thread_name_prefix=f"pagetask.{workspace.mets.unique_identifier}"
@@ -121,7 +121,10 @@ class Workspace():
121
121
  """
122
122
  Reload METS from the filesystem.
123
123
  """
124
- self.mets = OcrdMets(filename=self.mets_target)
124
+ if self.is_remote:
125
+ self.mets.reload()
126
+ else:
127
+ self.mets = OcrdMets(filename=self.mets_target)
125
128
 
126
129
  @deprecated_alias(pageId="page_id")
127
130
  @deprecated_alias(ID="file_id")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ocrd
3
- Version: 3.0.0b3
3
+ Version: 3.0.0b4
4
4
  Summary: OCR-D framework
5
5
  Author-email: Konstantin Baierer <unixprog@gmail.com>
6
6
  License: Apache License 2.0
ocrd-3.0.0b3/VERSION DELETED
@@ -1 +0,0 @@
1
- 3.0.0b3
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