rbx.cp 0.5.6__tar.gz → 0.5.7__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 (163) hide show
  1. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/PKG-INFO +1 -1
  2. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/pyproject.toml +1 -1
  3. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/contest/main.py +17 -9
  4. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/LICENSE +0 -0
  5. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/README.md +0 -0
  6. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/__init__.py +0 -0
  7. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/annotations.py +0 -0
  8. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/autoenum.py +0 -0
  9. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/__init__.py +0 -0
  10. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/builder.py +0 -0
  11. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/cd.py +0 -0
  12. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/checkers.py +0 -0
  13. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/code.py +0 -0
  14. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/compile.py +0 -0
  15. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/conftest.py +0 -0
  16. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/contest/__init__.py +0 -0
  17. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/contest/build_contest_statements.py +0 -0
  18. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/contest/contest_package.py +0 -0
  19. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/contest/contest_utils.py +0 -0
  20. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/contest/schema.py +0 -0
  21. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/contest/statements.py +0 -0
  22. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/creation.py +0 -0
  23. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/download.py +0 -0
  24. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/environment.py +0 -0
  25. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/extensions.py +0 -0
  26. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/generators.py +0 -0
  27. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/generators_test.py +0 -0
  28. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/main.py +0 -0
  29. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/package.py +0 -0
  30. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/packaging/boca/extension.py +0 -0
  31. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/packaging/boca/packager.py +0 -0
  32. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/packaging/contest_main.py +0 -0
  33. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/packaging/main.py +0 -0
  34. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/packaging/packager.py +0 -0
  35. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/packaging/polygon/packager.py +0 -0
  36. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/packaging/polygon/test.py +0 -0
  37. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/packaging/polygon/xml_schema.py +0 -0
  38. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/presets/__init__.py +0 -0
  39. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/presets/fetch.py +0 -0
  40. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/presets/lock_schema.py +0 -0
  41. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/presets/schema.py +0 -0
  42. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/schema.py +0 -0
  43. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/solutions.py +0 -0
  44. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/solutions_test.py +0 -0
  45. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/statements/__init__.py +0 -0
  46. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/statements/build_statements.py +0 -0
  47. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/statements/builders.py +0 -0
  48. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/statements/joiners.py +0 -0
  49. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/statements/latex.py +0 -0
  50. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/statements/latex_jinja.py +0 -0
  51. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/statements/schema.py +0 -0
  52. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/stresses.py +0 -0
  53. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/stressing/__init__.py +0 -0
  54. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/stressing/finder_parser.py +0 -0
  55. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/stressing/generator_parser.py +0 -0
  56. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/testcases.py +0 -0
  57. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/ui/__init__.py +0 -0
  58. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/ui/captured_log.py +0 -0
  59. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/ui/css/app.tcss +0 -0
  60. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/ui/main.py +0 -0
  61. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/ui/run.py +0 -0
  62. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/validators.py +0 -0
  63. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/box/validators_test.py +0 -0
  64. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/checker.py +0 -0
  65. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/clone.py +0 -0
  66. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/config.py +0 -0
  67. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/conftest.py +0 -0
  68. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/console.py +0 -0
  69. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/create.py +0 -0
  70. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/edit.py +0 -0
  71. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading/__init__.py +0 -0
  72. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading/caching.py +0 -0
  73. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading/conftest.py +0 -0
  74. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading/judge/__init__.py +0 -0
  75. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading/judge/cacher.py +0 -0
  76. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading/judge/digester.py +0 -0
  77. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading/judge/sandbox.py +0 -0
  78. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading/judge/sandboxes/__init__.py +0 -0
  79. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading/judge/sandboxes/isolate.py +0 -0
  80. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading/judge/sandboxes/stupid_sandbox.py +0 -0
  81. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading/judge/sandboxes/timeit.py +0 -0
  82. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading/judge/storage.py +0 -0
  83. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading/judge/test.py +0 -0
  84. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading/judge/testiso.py +0 -0
  85. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading/steps.py +0 -0
  86. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading/steps_with_caching.py +0 -0
  87. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading/steps_with_caching_run_test.py +0 -0
  88. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/grading_utils.py +0 -0
  89. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/hydration.py +0 -0
  90. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/main.py +0 -0
  91. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/metadata.py +0 -0
  92. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/providers/__init__.py +0 -0
  93. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/providers/codeforces.py +0 -0
  94. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/providers/provider.py +0 -0
  95. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/checkers/boilerplate.cpp +0 -0
  96. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/default_config.json +0 -0
  97. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/envs/default.rbx.yml +0 -0
  98. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/envs/isolate.rbx.yml +0 -0
  99. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/packagers/boca/checker.sh +0 -0
  100. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/packagers/boca/compare +0 -0
  101. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/packagers/boca/compile/c +0 -0
  102. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/packagers/boca/compile/cc +0 -0
  103. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/packagers/boca/compile/cpp +0 -0
  104. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/packagers/boca/compile/java +0 -0
  105. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/packagers/boca/compile/kt +0 -0
  106. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/packagers/boca/compile/pas +0 -0
  107. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/packagers/boca/compile/py2 +0 -0
  108. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/packagers/boca/compile/py3 +0 -0
  109. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/packagers/boca/run/c +0 -0
  110. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/packagers/boca/run/cc +0 -0
  111. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/packagers/boca/run/cpp +0 -0
  112. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/packagers/boca/run/java +0 -0
  113. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/packagers/boca/run/kt +0 -0
  114. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/packagers/boca/run/py2 +0 -0
  115. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/packagers/boca/run/py3 +0 -0
  116. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/contest/contest.rbx.yml +0 -0
  117. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/contest/statement/contest.rbx.tex +0 -0
  118. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/contest/statement/olymp.sty +0 -0
  119. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/contest/statement/template.rbx.tex +0 -0
  120. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/preset.rbx.yml +0 -0
  121. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/problem/.gitignore +0 -0
  122. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/problem/gen.cpp +0 -0
  123. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/problem/problem.rbx.yml +0 -0
  124. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/problem/random.py +0 -0
  125. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/problem/random.txt +0 -0
  126. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/problem/sols/main.cpp +0 -0
  127. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/problem/sols/slow.cpp +0 -0
  128. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/problem/sols/wa.cpp +0 -0
  129. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/problem/statement/olymp.sty +0 -0
  130. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/problem/statement/projecao.png +0 -0
  131. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/problem/statement/statement.rbx.tex +0 -0
  132. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/problem/statement/template.rbx.tex +0 -0
  133. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/problem/tests/samples/000.in +0 -0
  134. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/problem/tests/samples/001.in +0 -0
  135. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/problem/validator.cpp +0 -0
  136. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/presets/default/problem/wcmp.cpp +0 -0
  137. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/resources/templates/template.cpp +0 -0
  138. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/run.py +0 -0
  139. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/schema.py +0 -0
  140. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/submit.py +0 -0
  141. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/submitors/__init__.py +0 -0
  142. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/submitors/codeforces.py +0 -0
  143. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/submitors/submitor.py +0 -0
  144. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/test.py +0 -0
  145. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testcase.py +0 -0
  146. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testcase_rendering.py +0 -0
  147. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testdata/box1/gen1.cpp +0 -0
  148. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testdata/box1/gen2.cpp +0 -0
  149. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testdata/box1/genScript.py +0 -0
  150. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testdata/box1/hard-tle.sol.cpp +0 -0
  151. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testdata/box1/ole.cpp +0 -0
  152. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testdata/box1/problem.rbx.yml +0 -0
  153. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testdata/box1/re.sol.cpp +0 -0
  154. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testdata/box1/sol.cpp +0 -0
  155. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testdata/box1/tests/1.in +0 -0
  156. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testdata/box1/tle-and-incorrect.sol.cpp +0 -0
  157. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testdata/box1/tle.sol.cpp +0 -0
  158. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testdata/box1/validator.cpp +0 -0
  159. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testdata/box1/wa.sol.cpp +0 -0
  160. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testdata/caching/executable.py +0 -0
  161. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testdata/compatible +0 -0
  162. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/testing_utils.py +0 -0
  163. {rbx_cp-0.5.6 → rbx_cp-0.5.7}/rbx/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rbx.cp
3
- Version: 0.5.6
3
+ Version: 0.5.7
4
4
  Summary:
5
5
  Author: Roberto Sales
6
6
  Requires-Python: >=3.9,<4.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "rbx.cp"
3
- version = "0.5.6"
3
+ version = "0.5.7"
4
4
  description = ""
5
5
  packages = [
6
6
  {include = "rbx"}
@@ -3,6 +3,7 @@ import shutil
3
3
  import subprocess
4
4
  from typing import Annotated, Optional
5
5
 
6
+ import rich.prompt
6
7
  import typer
7
8
 
8
9
  from rbx import annotations, console, utils
@@ -38,7 +39,7 @@ app.add_typer(
38
39
 
39
40
  @app.command('create, c', help='Create a new contest package.')
40
41
  def create(
41
- name: str,
42
+ path: str,
42
43
  preset: Annotated[
43
44
  str,
44
45
  typer.Option(
@@ -54,7 +55,7 @@ def create(
54
55
  help='Whether to inline the installed preset within the contest folder.',
55
56
  ),
56
57
  ):
57
- console.console.print(f'Creating new contest [item]{name}[/item]...')
58
+ console.console.print(f'Creating new contest at [item]{path}[/item]...')
58
59
 
59
60
  fetch_info = get_preset_fetch_info(preset)
60
61
  if fetch_info is None:
@@ -85,17 +86,24 @@ def create(
85
86
  )
86
87
  raise typer.Exit(1)
87
88
 
88
- dest_path = pathlib.Path(name)
89
+ dest_path = pathlib.Path(path)
89
90
 
90
91
  if dest_path.exists():
91
- console.console.print(
92
- f'[error]Directory [item]{dest_path}[/item] already exists.[/error]'
93
- )
94
- raise typer.Exit(1)
95
-
96
- shutil.copytree(str(contest_path), str(dest_path))
92
+ if not rich.prompt.Confirm.ask(
93
+ f'Directory [item]{dest_path}[/item] already exists. Create contest in it? This might be destructive.',
94
+ show_default=False,
95
+ console=console.console,
96
+ ):
97
+ console.console.print(
98
+ f'[error]Directory [item]{dest_path}[/item] already exists.[/error]'
99
+ )
100
+ raise typer.Exit(1)
101
+
102
+ dest_path.mkdir(parents=True, exist_ok=True)
103
+ shutil.copytree(str(contest_path), str(dest_path), dirs_exist_ok=True)
97
104
  shutil.rmtree(str(dest_path / 'build'), ignore_errors=True)
98
105
  shutil.rmtree(str(dest_path / '.box'), ignore_errors=True)
106
+ shutil.rmtree(str(dest_path / '.local.rbx'), ignore_errors=True)
99
107
  # TODO: consider clearing build and .box recursively for nested problem directories
100
108
  for lock in dest_path.rglob('.preset-lock.yml'):
101
109
  lock.unlink(missing_ok=True)
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