QuLab 2.6.0__tar.gz → 2.6.1__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.
- {qulab-2.6.0 → qulab-2.6.1}/PKG-INFO +1 -1
- {qulab-2.6.0 → qulab-2.6.1}/QuLab.egg-info/PKG-INFO +1 -1
- {qulab-2.6.0 → qulab-2.6.1}/qulab/__init__.py +1 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/executor/load.py +8 -8
- {qulab-2.6.0 → qulab-2.6.1}/qulab/executor/schedule.py +8 -4
- {qulab-2.6.0 → qulab-2.6.1}/qulab/executor/storage.py +34 -2
- {qulab-2.6.0 → qulab-2.6.1}/qulab/executor/transform.py +8 -48
- {qulab-2.6.0 → qulab-2.6.1}/qulab/executor/utils.py +3 -3
- qulab-2.6.1/qulab/version.py +1 -0
- qulab-2.6.0/qulab/version.py +0 -1
- {qulab-2.6.0 → qulab-2.6.1}/LICENSE +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/MANIFEST.in +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/QuLab.egg-info/SOURCES.txt +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/QuLab.egg-info/dependency_links.txt +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/QuLab.egg-info/entry_points.txt +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/QuLab.egg-info/requires.txt +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/QuLab.egg-info/top_level.txt +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/README.md +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/pyproject.toml +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/__main__.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/cli/__init__.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/cli/commands.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/cli/config.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/dicttree.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/executor/__init__.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/executor/cli.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/monitor/__init__.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/monitor/__main__.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/monitor/config.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/monitor/dataset.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/monitor/event_queue.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/monitor/mainwindow.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/monitor/monitor.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/monitor/ploter.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/monitor/qt_compat.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/monitor/toolbar.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/scan/__init__.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/scan/curd.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/scan/expression.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/scan/models.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/scan/optimize.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/scan/query.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/scan/record.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/scan/scan.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/scan/server.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/scan/space.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/scan/utils.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/__init__.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/__main__.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/backend/__init__.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/backend/redis.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/base_dataset.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/chunk.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/dataset.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/file.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/models/__init__.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/models/base.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/models/config.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/models/file.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/models/ipy.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/models/models.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/models/record.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/models/report.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/models/tag.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/storage/storage.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/__init__.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/chat.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/device/__init__.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/device/basedevice.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/device/loader.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/device/utils.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/drivers/FakeInstrument.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/drivers/__init__.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/ipy_events.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/net/__init__.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/net/bencoder.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/net/cli.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/net/dhcp.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/net/dhcpd.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/net/kad.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/net/kcp.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/net/nginx.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/progress.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/rpc/__init__.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/rpc/client.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/rpc/exceptions.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/rpc/msgpack.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/rpc/msgpack.pyi +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/rpc/router.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/rpc/rpc.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/rpc/serialize.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/rpc/server.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/rpc/socket.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/rpc/utils.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/rpc/worker.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/sys/rpc/zmq_socket.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/typing.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/visualization/__init__.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/visualization/__main__.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/visualization/_autoplot.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/visualization/plot_circ.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/visualization/plot_layout.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/visualization/plot_seq.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/visualization/qdat.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/visualization/rot3d.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/qulab/visualization/widgets.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/setup.cfg +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/setup.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/src/qulab.h +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/tests/test_kad.py +0 -0
- {qulab-2.6.0 → qulab-2.6.1}/tests/test_scan.py +0 -0
@@ -1,5 +1,6 @@
|
|
1
1
|
from .executor.storage import find_result
|
2
2
|
from .executor.storage import get_result_by_index as get_result
|
3
|
+
from .executor.utils import debug_analyze
|
3
4
|
from .scan import Scan, get_record, load_record, lookup, lookup_list
|
4
5
|
from .version import __version__
|
5
6
|
from .visualization import autoplot
|
@@ -123,7 +123,7 @@ def verify_check_method(module: WorkflowType):
|
|
123
123
|
|
124
124
|
|
125
125
|
def verify_dependence_key(workflow: str | tuple[str, dict[str, Any]]
|
126
|
-
| tuple[str, str, dict[str, Any]]):
|
126
|
+
| tuple[str, str, dict[str, Any]], base_path: Path):
|
127
127
|
if isinstance(workflow, str):
|
128
128
|
return
|
129
129
|
if not isinstance(workflow, tuple) or len(workflow) not in [2, 3]:
|
@@ -135,7 +135,7 @@ def verify_dependence_key(workflow: str | tuple[str, dict[str, Any]]
|
|
135
135
|
raise FileNotFoundError(f"File not found: {file_name}")
|
136
136
|
elif len(workflow) == 3:
|
137
137
|
template_path, target_path, mapping = workflow
|
138
|
-
if not Path(template_path).exists():
|
138
|
+
if not (Path(base_path) / template_path).exists():
|
139
139
|
raise FileNotFoundError(f"File not found: {template_path}")
|
140
140
|
if not isinstance(target_path, (Path, str)) or target_path == '':
|
141
141
|
raise ValueError(f"Invalid target_path: {target_path}")
|
@@ -165,7 +165,7 @@ def verify_dependence_key(workflow: str | tuple[str, dict[str, Any]]
|
|
165
165
|
return
|
166
166
|
|
167
167
|
|
168
|
-
def verify_depends(module: WorkflowType):
|
168
|
+
def verify_depends(module: WorkflowType, base_path):
|
169
169
|
if not hasattr(module, 'depends'):
|
170
170
|
return
|
171
171
|
|
@@ -184,10 +184,10 @@ def verify_depends(module: WorkflowType):
|
|
184
184
|
f"Workflow {module.__file__} 'depends' should be a callable or a list"
|
185
185
|
)
|
186
186
|
for workflow in deps:
|
187
|
-
verify_dependence_key(workflow)
|
187
|
+
verify_dependence_key(workflow, base_path)
|
188
188
|
|
189
189
|
|
190
|
-
def verify_entries(module: WorkflowType):
|
190
|
+
def verify_entries(module: WorkflowType, base_path):
|
191
191
|
if not hasattr(module, 'entries'):
|
192
192
|
return
|
193
193
|
|
@@ -206,7 +206,7 @@ def verify_entries(module: WorkflowType):
|
|
206
206
|
f"Workflow {module.__file__} 'entries' should be a callable or a list"
|
207
207
|
)
|
208
208
|
for workflow in deps:
|
209
|
-
verify_dependence_key(workflow)
|
209
|
+
verify_dependence_key(workflow, base_path)
|
210
210
|
|
211
211
|
|
212
212
|
def is_workflow(module: ModuleType) -> bool:
|
@@ -307,7 +307,7 @@ def load_workflow_from_file(file_name: str,
|
|
307
307
|
module.__mtime__ = (base_path / path).stat().st_mtime
|
308
308
|
|
309
309
|
if hasattr(module, 'entries'):
|
310
|
-
verify_entries(module)
|
310
|
+
verify_entries(module, base_path)
|
311
311
|
return module
|
312
312
|
|
313
313
|
if not hasattr(module, '__timeout__'):
|
@@ -315,7 +315,7 @@ def load_workflow_from_file(file_name: str,
|
|
315
315
|
|
316
316
|
if not hasattr(module, 'depends'):
|
317
317
|
module.depends = lambda: []
|
318
|
-
verify_depends(module)
|
318
|
+
verify_depends(module, base_path)
|
319
319
|
verify_calibrate_method(module)
|
320
320
|
verify_check_method(module)
|
321
321
|
|
@@ -125,7 +125,8 @@ def check_data(workflow: WorkflowType, code_path: str | Path,
|
|
125
125
|
if history is None:
|
126
126
|
logger.debug(f'No history found for "{workflow.__workflow_id__}"')
|
127
127
|
result = Result(workflow=workflow.__workflow_id__,
|
128
|
-
config_path=current_config(state_path)
|
128
|
+
config_path=current_config(state_path),
|
129
|
+
base_path=state_path)
|
129
130
|
result.in_spec = False
|
130
131
|
result.bad_data = False
|
131
132
|
return result
|
@@ -153,7 +154,8 @@ def check_data(workflow: WorkflowType, code_path: str | Path,
|
|
153
154
|
)
|
154
155
|
result = Result(workflow=workflow.__workflow_id__,
|
155
156
|
data=data,
|
156
|
-
config_path=current_config(state_path)
|
157
|
+
config_path=current_config(state_path),
|
158
|
+
base_path=state_path)
|
157
159
|
#save_result(workflow.__workflow_id__, result, state_path)
|
158
160
|
|
159
161
|
logger.debug(f'Checked "{workflow.__workflow_id__}" !')
|
@@ -183,7 +185,8 @@ def check_data(workflow: WorkflowType, code_path: str | Path,
|
|
183
185
|
)
|
184
186
|
result = Result(workflow=workflow.__workflow_id__,
|
185
187
|
data=data,
|
186
|
-
config_path=current_config(state_path)
|
188
|
+
config_path=current_config(state_path),
|
189
|
+
base_path=state_path)
|
187
190
|
save_result(workflow.__workflow_id__, result, state_path)
|
188
191
|
|
189
192
|
logger.debug(f'Calibrated "{workflow}" !')
|
@@ -213,7 +216,8 @@ def calibrate(workflow: WorkflowType, code_path: str | Path,
|
|
213
216
|
)
|
214
217
|
result = Result(workflow=workflow.__workflow_id__,
|
215
218
|
data=data,
|
216
|
-
config_path=current_config(state_path)
|
219
|
+
config_path=current_config(state_path),
|
220
|
+
base_path=state_path)
|
217
221
|
save_result(workflow.__workflow_id__, result, state_path)
|
218
222
|
logger.debug(f'Calibrated "{workflow.__workflow_id__}" !')
|
219
223
|
result = call_analyzer(workflow, result, history, check=False, plot=plot)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import hashlib
|
1
2
|
import lzma
|
2
3
|
import pickle
|
3
4
|
import uuid
|
@@ -50,9 +51,8 @@ class Result():
|
|
50
51
|
|
51
52
|
@property
|
52
53
|
def config(self):
|
53
|
-
from . import transform
|
54
54
|
if self.config_path is not None and self.base_path is not None:
|
55
|
-
return
|
55
|
+
return load_config(self.config_path, self.base_path)
|
56
56
|
else:
|
57
57
|
return None
|
58
58
|
|
@@ -241,3 +241,35 @@ def get_result_by_index(
|
|
241
241
|
return load_result(path, base_path)
|
242
242
|
except:
|
243
243
|
return None
|
244
|
+
|
245
|
+
|
246
|
+
def save_config(cfg, data_path):
|
247
|
+
i = 0
|
248
|
+
buf = pickle.dumps(cfg)
|
249
|
+
buf = lzma.compress(buf)
|
250
|
+
h = hashlib.md5(buf)
|
251
|
+
|
252
|
+
while True:
|
253
|
+
salt = f"{i}".encode()
|
254
|
+
h.update(salt)
|
255
|
+
hashstr = h.hexdigest()
|
256
|
+
cfg_id = Path(hashstr[:2]) / hashstr[2:4] / hashstr[4:]
|
257
|
+
path = Path(data_path) / 'config' / cfg_id
|
258
|
+
if not path.exists():
|
259
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
260
|
+
with open(path, 'wb') as f:
|
261
|
+
f.write(buf)
|
262
|
+
break
|
263
|
+
elif path.read_bytes() == buf:
|
264
|
+
break
|
265
|
+
i += 1
|
266
|
+
return str(cfg_id)
|
267
|
+
|
268
|
+
|
269
|
+
@lru_cache(maxsize=1024)
|
270
|
+
def load_config(id, data_path):
|
271
|
+
path = Path(data_path) / 'config' / id
|
272
|
+
with open(path, 'rb') as f:
|
273
|
+
buf = f.read()
|
274
|
+
cfg = pickle.loads(lzma.decompress(buf))
|
275
|
+
return cfg
|
@@ -1,12 +1,6 @@
|
|
1
|
-
import
|
2
|
-
import hashlib
|
3
|
-
import lzma
|
4
|
-
import pickle
|
5
|
-
from pathlib import Path
|
1
|
+
from .storage import Result, save_config
|
6
2
|
|
7
|
-
|
8
|
-
|
9
|
-
__config_id = None
|
3
|
+
__current_config_id = None
|
10
4
|
|
11
5
|
|
12
6
|
def _query_config(name: str, default=None):
|
@@ -50,52 +44,18 @@ def _export_config() -> dict:
|
|
50
44
|
|
51
45
|
|
52
46
|
def update_parameters(result: Result, data_path):
|
53
|
-
global
|
47
|
+
global __current_config_id
|
54
48
|
update_config(result.parameters)
|
55
49
|
cfg = export_config()
|
56
|
-
|
50
|
+
__current_config_id = save_config(cfg, data_path)
|
57
51
|
|
58
52
|
|
59
53
|
def current_config(data_path):
|
60
|
-
global
|
61
|
-
if
|
54
|
+
global __current_config_id
|
55
|
+
if __current_config_id is None:
|
62
56
|
cfg = export_config()
|
63
|
-
|
64
|
-
return
|
65
|
-
|
66
|
-
|
67
|
-
def _save_config(cfg, data_path):
|
68
|
-
global __config_id
|
69
|
-
i = 0
|
70
|
-
buf = pickle.dumps(cfg)
|
71
|
-
buf = lzma.compress(buf)
|
72
|
-
h = hashlib.md5(buf)
|
73
|
-
|
74
|
-
while True:
|
75
|
-
salt = f"{i:08d}".encode()
|
76
|
-
h.update(salt)
|
77
|
-
hashstr = h.hexdigest()
|
78
|
-
cfg_id = Path(hashstr[:2]) / hashstr[2:4] / hashstr[4:]
|
79
|
-
path = Path(data_path) / 'config' / cfg_id
|
80
|
-
if not path.exists():
|
81
|
-
path.parent.mkdir(parents=True, exist_ok=True)
|
82
|
-
with open(path, 'wb') as f:
|
83
|
-
f.write(buf)
|
84
|
-
break
|
85
|
-
elif path.read_bytes() == buf:
|
86
|
-
break
|
87
|
-
i += 1
|
88
|
-
__config_id = str(cfg_id)
|
89
|
-
return __config_id
|
90
|
-
|
91
|
-
|
92
|
-
@functools.lru_cache(maxsize=1024)
|
93
|
-
def _load_config(id, data_path):
|
94
|
-
path = Path(data_path) / 'config' / id
|
95
|
-
with open(path, 'rb') as f:
|
96
|
-
buf = f.read()
|
97
|
-
cfg = pickle.loads(lzma.decompress(buf))
|
98
|
-
return cfg
|
57
|
+
__current_config_id = save_config(cfg, data_path)
|
58
|
+
return __current_config_id
|
99
59
|
|
100
60
|
|
101
61
|
query_config = _query_config
|
@@ -138,8 +138,8 @@ def check_analyze(result: Result, history: Result | None = None) -> Result:
|
|
138
138
|
|
139
139
|
def debug_analyze(
|
140
140
|
result_index: int,
|
141
|
-
code_path: str | Path = get_config_value('
|
142
|
-
data_path: str | Path = get_config_value('
|
141
|
+
code_path: str | Path = get_config_value('code', Path),
|
142
|
+
data_path: str | Path = get_config_value('data', Path),
|
143
143
|
) -> None:
|
144
144
|
from .storage import get_result_by_index
|
145
145
|
|
@@ -150,7 +150,7 @@ def debug_analyze(
|
|
150
150
|
wf = load_workflow(workflow, code_path)
|
151
151
|
if wf is None:
|
152
152
|
raise ValueError(f'Invalid workflow: {workflow}')
|
153
|
-
result = wf.analyze(result)
|
153
|
+
result = wf.analyze(result, result.previous)
|
154
154
|
if hasattr(wf, 'plot'):
|
155
155
|
wf.plot(result)
|
156
156
|
return result
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "2.6.1"
|
qulab-2.6.0/qulab/version.py
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = "2.6.0"
|
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
|
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
|