dimples 0.5.6__tar.gz → 0.5.8__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.
- {dimples-0.5.6 → dimples-0.5.8}/PKG-INFO +1 -1
- {dimples-0.5.6 → dimples-0.5.8}/dimples/edge/octopus.py +47 -19
- {dimples-0.5.6 → dimples-0.5.8}/dimples/server/dispatcher.py +25 -21
- {dimples-0.5.6 → dimples-0.5.8}/dimples.egg-info/PKG-INFO +1 -1
- {dimples-0.5.6 → dimples-0.5.8}/setup.py +1 -1
- {dimples-0.5.6 → dimples-0.5.8}/README.md +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/archivist.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/checkpoint.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/cpu/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/cpu/commands.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/cpu/creator.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/cpu/group.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/cpu/grp_expel.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/cpu/grp_invite.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/cpu/grp_join.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/cpu/grp_query.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/cpu/grp_quit.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/cpu/grp_reset.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/cpu/grp_resign.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/cpu/handshake.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/facebook.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/messenger.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/network/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/network/session.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/network/state.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/network/transition.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/packer.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/processor.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/client/terminal.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/anonymous.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/ans.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/archivist.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/compat/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/compat/btc.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/compat/compatible.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/compat/entity.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/compat/meta.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/compat/network.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/dbi/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/dbi/account.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/dbi/message.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/dbi/session.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/facebook.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/messenger.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/packer.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/processer.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/protocol/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/protocol/ans.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/protocol/block.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/protocol/handshake.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/protocol/login.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/protocol/mute.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/protocol/report.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/register.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/common/session.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/conn/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/conn/gate.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/conn/gatekeeper.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/conn/mars.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/conn/mtp.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/conn/protocol/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/conn/protocol/mars.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/conn/protocol/ws.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/conn/queue.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/conn/seeker.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/conn/session.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/conn/ws.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/account.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/dos/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/dos/base.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/dos/document.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/dos/group.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/dos/group_history.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/dos/group_keys.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/dos/login.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/dos/meta.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/dos/private.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/dos/station.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/dos/user.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/message.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/session.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/t_cipherkey.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/t_document.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/t_group.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/t_group_history.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/t_group_keys.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/t_login.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/t_message.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/t_meta.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/t_private.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/t_station.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/database/t_user.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/edge/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/edge/shared.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/edge/start.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/group/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/group/admin.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/group/builder.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/group/delegate.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/group/emitter.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/group/helper.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/group/manager.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/group/packer.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/register/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/register/base.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/register/ext.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/register/run.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/register/shared.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/server/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/server/archivist.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/server/cpu/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/server/cpu/ans.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/server/cpu/document.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/server/cpu/handshake.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/server/cpu/login.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/server/cpu/report.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/server/messenger.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/server/packer.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/server/processor.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/server/push.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/server/session.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/server/session_center.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/server/trace.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/station/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/station/handler.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/station/shared.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/station/start.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/utils/__init__.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/utils/cache.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/utils/config.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/utils/dos.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/utils/log.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples/utils/singleton.py +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples.egg-info/SOURCES.txt +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples.egg-info/dependency_links.txt +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples.egg-info/entry_points.txt +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples.egg-info/requires.txt +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/dimples.egg-info/top_level.txt +0 -0
- {dimples-0.5.6 → dimples-0.5.8}/setup.cfg +0 -0
|
@@ -190,35 +190,63 @@ class Octopus(Runner, Logging):
|
|
|
190
190
|
|
|
191
191
|
def income_message(self, msg: ReliableMessage, priority: int = 0) -> List[ReliableMessage]:
|
|
192
192
|
""" redirect message from remote station """
|
|
193
|
+
sender = msg.sender
|
|
194
|
+
receiver = msg.receiver
|
|
193
195
|
sig = get_msg_sig(msg=msg)
|
|
194
196
|
messenger = self.inner_messenger
|
|
195
197
|
if messenger.send_reliable_message(msg=msg, priority=priority):
|
|
196
|
-
self.info(msg='redirected msg (%s)
|
|
198
|
+
self.info(msg='redirected msg (%s): %s -> %s' % (sig, sender, receiver))
|
|
197
199
|
else:
|
|
198
|
-
self.error(msg='failed to redirect msg (%s)
|
|
200
|
+
self.error(msg='failed to redirect msg (%s): %s -> %s' % (sig, sender, receiver))
|
|
199
201
|
# no need to respond receipt for station
|
|
200
202
|
return []
|
|
201
203
|
|
|
202
204
|
def outgo_message(self, msg: ReliableMessage, priority: int = 0) -> List[ReliableMessage]:
|
|
203
205
|
""" redirect message to remote station """
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
self.
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
206
|
+
receiver = msg.receiver
|
|
207
|
+
# get neighbor stations
|
|
208
|
+
neighbor = ID.parse(identifier=msg.get('neighbor'))
|
|
209
|
+
if neighbor is not None:
|
|
210
|
+
neighbors = set()
|
|
211
|
+
neighbors.add(neighbor)
|
|
212
|
+
msg.pop('neighbor', None)
|
|
213
|
+
else:
|
|
214
|
+
with self.__outer_lock:
|
|
215
|
+
neighbors = set(self.__outer_map.keys())
|
|
216
|
+
#
|
|
217
|
+
# 0. check recipients
|
|
218
|
+
#
|
|
219
|
+
new_recipients = set()
|
|
220
|
+
old_recipients = msg.get('recipients')
|
|
221
|
+
old_recipients = [] if old_recipients is None else ID.convert(old_recipients)
|
|
222
|
+
for item in neighbors:
|
|
223
|
+
if item in old_recipients:
|
|
224
|
+
self.info(msg='skip exists station: %s' % item)
|
|
225
|
+
continue
|
|
226
|
+
self.info(msg='new neighbor station: %s' % item)
|
|
227
|
+
new_recipients.add(item)
|
|
228
|
+
# update 'recipients' to avoid the new recipients redirect it to same targets
|
|
229
|
+
self.info(msg='append new recipients: %s, %s + %s' % (receiver, new_recipients, old_recipients))
|
|
230
|
+
all_recipients = list(old_recipients) + list(new_recipients)
|
|
231
|
+
msg['recipients'] = ID.revert(all_recipients)
|
|
232
|
+
#
|
|
233
|
+
# 1. send to the new recipients (neighbor stations)
|
|
234
|
+
#
|
|
220
235
|
sig = get_msg_sig(msg=msg)
|
|
221
|
-
|
|
236
|
+
failed_neighbors = []
|
|
237
|
+
for target in new_recipients:
|
|
238
|
+
messenger = self.get_outer_messenger(identifier=target)
|
|
239
|
+
if messenger is None:
|
|
240
|
+
# target station not my neighbor
|
|
241
|
+
self.warning(msg='not my neighbor: %s (%s)' % (target, receiver))
|
|
242
|
+
failed_neighbors.append(target)
|
|
243
|
+
elif messenger.send_reliable_message(msg=msg, priority=priority):
|
|
244
|
+
self.info(msg='redirected msg (%s) to neighbor: %s (%s)' % (sig, target, receiver))
|
|
245
|
+
else:
|
|
246
|
+
self.error(msg='failed to send to neighbor: %s (%s)' % (target, receiver))
|
|
247
|
+
failed_neighbors.append(target)
|
|
248
|
+
if len(failed_neighbors) > 0:
|
|
249
|
+
self.error(msg='failed to redirect msg (%s) for receiver (%s): %s' % (sig, receiver, failed_neighbors))
|
|
222
250
|
return []
|
|
223
251
|
|
|
224
252
|
|
|
@@ -206,26 +206,27 @@ class Dispatcher(MessageDeliver, Logging):
|
|
|
206
206
|
return [res]
|
|
207
207
|
|
|
208
208
|
def __broadcast_message(self, msg: ReliableMessage, receiver: ID, neighbors: Set[ID]) -> List[Content]:
|
|
209
|
+
current = self.facebook.current_user
|
|
210
|
+
assert current is not None, 'failed to get current station'
|
|
211
|
+
current = current.identifier
|
|
209
212
|
#
|
|
210
213
|
# 0. check recipients
|
|
211
214
|
#
|
|
212
|
-
new_recipients =
|
|
215
|
+
new_recipients = set()
|
|
213
216
|
old_recipients = msg.get('recipients')
|
|
214
|
-
if old_recipients is None
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
self.info(msg='append new recipients: %s, %s
|
|
226
|
-
|
|
227
|
-
all_recipients.append(item)
|
|
228
|
-
# avoid the new recipients redirect it to same targets
|
|
217
|
+
old_recipients = [] if old_recipients is None else ID.convert(old_recipients)
|
|
218
|
+
for item in neighbors:
|
|
219
|
+
if item == current:
|
|
220
|
+
self.info(msg='skip current station: %s' % item)
|
|
221
|
+
continue
|
|
222
|
+
elif item in old_recipients:
|
|
223
|
+
self.info(msg='skip exists station: %s' % item)
|
|
224
|
+
continue
|
|
225
|
+
self.info(msg='new neighbor station: %s' % item)
|
|
226
|
+
new_recipients.add(item)
|
|
227
|
+
# set 'recipients' in the msg to avoid the new recipients redirect it to same targets
|
|
228
|
+
self.info(msg='append new recipients: %s, %s + %s' % (receiver, new_recipients, old_recipients))
|
|
229
|
+
all_recipients = list(old_recipients) + list(new_recipients)
|
|
229
230
|
msg['recipients'] = ID.revert(all_recipients)
|
|
230
231
|
#
|
|
231
232
|
# 1. push to neighbor stations directly
|
|
@@ -234,10 +235,13 @@ class Dispatcher(MessageDeliver, Logging):
|
|
|
234
235
|
for target in new_recipients:
|
|
235
236
|
if session_push(msg=msg, receiver=target) == 0:
|
|
236
237
|
indirect_neighbors.add(target)
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
238
|
+
# remove unsuccessful items
|
|
239
|
+
for item in indirect_neighbors:
|
|
240
|
+
new_recipients.discard(item)
|
|
241
|
+
# update 'recipients' before redirect via bridge
|
|
242
|
+
self.info(msg='update recipients: %s, %s + %s' % (receiver, new_recipients, old_recipients))
|
|
243
|
+
all_recipients = list(old_recipients) + list(new_recipients)
|
|
244
|
+
msg['recipients'] = ID.revert(all_recipients)
|
|
241
245
|
#
|
|
242
246
|
# 2. push to other neighbor stations via station bridge
|
|
243
247
|
#
|
|
@@ -384,7 +388,7 @@ class DeliverWorker(Logging):
|
|
|
384
388
|
:return: responses
|
|
385
389
|
"""
|
|
386
390
|
""" Redirect message to neighbor station """
|
|
387
|
-
assert neighbor.type == EntityType.STATION, 'neighbor station ID error: %s' % neighbor
|
|
391
|
+
assert neighbor is None or neighbor.type == EntityType.STATION, 'neighbor station ID error: %s' % neighbor
|
|
388
392
|
self.info(msg='redirect message %s => %s to neighbor station: %s' % (msg.sender, msg.receiver, neighbor))
|
|
389
393
|
# 0. check current station
|
|
390
394
|
current = self.facebook.current_user.identifier
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|