sunholo 0.74.1__tar.gz → 0.74.3__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.
- {sunholo-0.74.1 → sunholo-0.74.3}/PKG-INFO +2 -2
- {sunholo-0.74.1 → sunholo-0.74.3}/setup.py +1 -1
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/tools/web_browser.py +56 -7
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/utils/config_class.py +3 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo.egg-info/PKG-INFO +2 -2
- {sunholo-0.74.1 → sunholo-0.74.3}/LICENSE.txt +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/MANIFEST.in +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/README.md +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/setup.cfg +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/agents/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/agents/chat_history.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/agents/dispatch_to_qa.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/agents/fastapi/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/agents/fastapi/base.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/agents/fastapi/qna_routes.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/agents/flask/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/agents/flask/base.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/agents/flask/qna_routes.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/agents/flask/vac_routes.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/agents/langserve.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/agents/pubsub.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/agents/route.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/agents/special_commands.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/agents/swagger.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/archive/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/archive/archive.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/auth/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/auth/run.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/bots/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/bots/discord.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/bots/github_webhook.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/bots/webapp.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/chunker/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/chunker/data_to_embed_pubsub.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/chunker/doc_handling.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/chunker/images.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/chunker/loaders.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/chunker/message_data.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/chunker/pdfs.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/chunker/publish.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/chunker/splitter.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/cli/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/cli/chat_vac.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/cli/cli.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/cli/cli_init.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/cli/configs.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/cli/deploy.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/cli/embedder.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/cli/merge_texts.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/cli/run_proxy.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/cli/sun_rich.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/cli/swagger.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/components/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/components/llm.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/components/retriever.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/components/vectorstore.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/database/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/database/alloydb.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/database/alloydb_client.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/database/database.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/database/lancedb.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/database/sql/sb/create_function.sql +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/database/sql/sb/create_function_time.sql +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/database/sql/sb/create_table.sql +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/database/sql/sb/delete_source_row.sql +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/database/sql/sb/return_sources.sql +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/database/sql/sb/setup.sql +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/database/static_dbs.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/database/uuid.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/discovery_engine/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/discovery_engine/chunker_handler.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/discovery_engine/create_new.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/discovery_engine/discovery_engine_client.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/embedder/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/embedder/embed_chunk.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/gcs/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/gcs/add_file.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/gcs/download_url.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/gcs/metadata.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/invoke/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/invoke/invoke_vac_utils.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/langfuse/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/langfuse/callback.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/langfuse/prompts.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/llamaindex/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/llamaindex/generate.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/llamaindex/get_files.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/llamaindex/import_files.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/logging.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/lookup/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/lookup/model_lookup.yaml +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/patches/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/patches/langchain/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/patches/langchain/lancedb.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/patches/langchain/vertexai.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/pubsub/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/pubsub/process_pubsub.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/pubsub/pubsub_manager.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/qna/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/qna/parsers.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/qna/retry.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/streaming/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/streaming/content_buffer.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/streaming/langserve.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/streaming/stream_lookup.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/streaming/streaming.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/summarise/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/summarise/summarise.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/tools/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/utils/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/utils/api_key.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/utils/big_context.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/utils/config.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/utils/config_schema.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/utils/gcp.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/utils/gcp_project.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/utils/parsers.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/utils/timedelta.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/utils/user_ids.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/utils/version.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/vertex/__init__.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/vertex/extensions_class.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/vertex/init.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/vertex/memory_tools.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo/vertex/safety.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo.egg-info/SOURCES.txt +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo.egg-info/dependency_links.txt +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo.egg-info/entry_points.txt +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo.egg-info/requires.txt +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/sunholo.egg-info/top_level.txt +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/tests/test_chat_history.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/tests/test_chunker.py +0 -0
- {sunholo-0.74.1 → sunholo-0.74.3}/tests/test_config.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sunholo
|
|
3
|
-
Version: 0.74.
|
|
3
|
+
Version: 0.74.3
|
|
4
4
|
Summary: Large Language Model DevOps - a package to help deploy LLMs to the Cloud.
|
|
5
5
|
Home-page: https://github.com/sunholo-data/sunholo-py
|
|
6
|
-
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.74.
|
|
6
|
+
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.74.3.tar.gz
|
|
7
7
|
Author: Holosun ApS
|
|
8
8
|
Author-email: multivac@sunholo.com
|
|
9
9
|
License: Apache License, Version 2.0
|
|
@@ -3,6 +3,7 @@ import base64
|
|
|
3
3
|
import json
|
|
4
4
|
from datetime import datetime
|
|
5
5
|
import urllib.parse
|
|
6
|
+
import time
|
|
6
7
|
|
|
7
8
|
from ..logging import log
|
|
8
9
|
|
|
@@ -354,12 +355,18 @@ class BrowseWebWithImagePromptsBot:
|
|
|
354
355
|
output = response
|
|
355
356
|
elif isinstance(response, str):
|
|
356
357
|
output = json.loads(response)
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
358
|
+
elif isinstance(response, list):
|
|
359
|
+
log.warning(f'Response was a list, assuming its only new_instructions: {response=}')
|
|
360
|
+
output['new_instructions'] = response
|
|
361
|
+
output['status'] = 'in-progress'
|
|
362
|
+
output['message'] = 'No message was received, which is a mistake by the assistant'
|
|
363
|
+
else:
|
|
364
|
+
log.warning(f'Unknown response: {response=} {type(response)}')
|
|
365
|
+
output = None
|
|
360
366
|
|
|
361
367
|
if 'status' not in output:
|
|
362
368
|
log.error(f'Response did not contain status')
|
|
369
|
+
|
|
363
370
|
|
|
364
371
|
if 'new_instructions' not in output:
|
|
365
372
|
log.warning(f'Response did not include new_instructions')
|
|
@@ -391,6 +398,8 @@ This method should be implemented by subclasses: `def send_prompt_to_llm(self, p
|
|
|
391
398
|
self.save_cookies()
|
|
392
399
|
self.browser.close()
|
|
393
400
|
self.playwright.stop()
|
|
401
|
+
self.save_action_log()
|
|
402
|
+
self.create_gif_from_pngs()
|
|
394
403
|
|
|
395
404
|
def execute_instructions(self, instructions: list, last_message: str=None):
|
|
396
405
|
if not instructions:
|
|
@@ -426,13 +435,50 @@ This method should be implemented by subclasses: `def send_prompt_to_llm(self, p
|
|
|
426
435
|
if self.steps >= self.max_steps:
|
|
427
436
|
log.warning(f"Reached the maximum number of steps: {self.max_steps}")
|
|
428
437
|
return
|
|
429
|
-
|
|
438
|
+
time.sleep(2)
|
|
430
439
|
screenshot_path = self.take_screenshot(mark_action=mark_action)
|
|
431
440
|
next_browser_instructions = self.send_screenshot_to_llm(
|
|
432
441
|
screenshot_path,
|
|
433
442
|
last_message=last_message)
|
|
434
443
|
|
|
435
444
|
return next_browser_instructions
|
|
445
|
+
|
|
446
|
+
def create_gif_from_pngs(self, frame_duration=500):
|
|
447
|
+
"""
|
|
448
|
+
Creates a GIF from a folder of PNG images.
|
|
449
|
+
|
|
450
|
+
Args:
|
|
451
|
+
folder_path (str): The path to the folder containing PNG images.
|
|
452
|
+
output_gif_path (str): The path where the output GIF will be saved.
|
|
453
|
+
duration (int): Duration between frames in milliseconds.
|
|
454
|
+
|
|
455
|
+
Example:
|
|
456
|
+
create_gif_from_pngs('/path/to/png_folder', '/path/to/output.gif', duration=500)
|
|
457
|
+
"""
|
|
458
|
+
from PIL import Image
|
|
459
|
+
|
|
460
|
+
folder_path=self.screenshot_dir
|
|
461
|
+
output_gif_path = os.path.join(self.screenshot_dir, "session.gif")
|
|
462
|
+
|
|
463
|
+
# List all PNG files in the folder
|
|
464
|
+
png_files = [f for f in sorted(os.listdir(folder_path)) if f.endswith('.png')]
|
|
465
|
+
|
|
466
|
+
# Open images and store them in a list
|
|
467
|
+
images = [Image.open(os.path.join(folder_path, file)) for file in png_files]
|
|
468
|
+
|
|
469
|
+
duration = len(images) * frame_duration
|
|
470
|
+
# Save images as a GIF
|
|
471
|
+
if images:
|
|
472
|
+
images[0].save(
|
|
473
|
+
output_gif_path,
|
|
474
|
+
save_all=True,
|
|
475
|
+
append_images=images[1:],
|
|
476
|
+
duration=duration,
|
|
477
|
+
loop=0
|
|
478
|
+
)
|
|
479
|
+
print(f"GIF saved at {output_gif_path}")
|
|
480
|
+
else:
|
|
481
|
+
print("No PNG images found in the folder.")
|
|
436
482
|
|
|
437
483
|
def start_session(self, instructions, session_goal):
|
|
438
484
|
self.session_goal = session_goal
|
|
@@ -442,6 +488,9 @@ This method should be implemented by subclasses: `def send_prompt_to_llm(self, p
|
|
|
442
488
|
|
|
443
489
|
next_instructions = self.execute_instructions(instructions)
|
|
444
490
|
|
|
491
|
+
# load previous actions from same session
|
|
492
|
+
self.load_action_log()
|
|
493
|
+
|
|
445
494
|
in_session = True
|
|
446
495
|
while in_session:
|
|
447
496
|
if next_instructions and 'status' in next_instructions:
|
|
@@ -464,16 +513,16 @@ This method should be implemented by subclasses: `def send_prompt_to_llm(self, p
|
|
|
464
513
|
break
|
|
465
514
|
|
|
466
515
|
log.info("Session finished")
|
|
467
|
-
|
|
516
|
+
final_screenshot = self.take_screenshot()
|
|
517
|
+
|
|
468
518
|
self.close()
|
|
469
|
-
self.save_action_log()
|
|
470
519
|
|
|
471
520
|
return {
|
|
472
521
|
"website": self.website_name,
|
|
473
522
|
"log": self.action_log,
|
|
474
523
|
"next_instructions": next_instructions,
|
|
475
524
|
"session_screenshots": self.session_screenshots,
|
|
476
|
-
"
|
|
525
|
+
"final_screenshot": final_screenshot,
|
|
477
526
|
"session_goal": self.session_goal
|
|
478
527
|
}
|
|
479
528
|
|
|
@@ -90,6 +90,9 @@ class ConfigManager:
|
|
|
90
90
|
config = self._reload_config_file(config_file, filename, folder == self.local_config_folder)
|
|
91
91
|
else:
|
|
92
92
|
config = self._reload_config_file(config_file, filename, folder == self.local_config_folder)
|
|
93
|
+
if config is None:
|
|
94
|
+
log.error(f"No config found within {filename}")
|
|
95
|
+
continue
|
|
93
96
|
kind = config.get('kind')
|
|
94
97
|
if kind:
|
|
95
98
|
configs_by_kind[kind] = config
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sunholo
|
|
3
|
-
Version: 0.74.
|
|
3
|
+
Version: 0.74.3
|
|
4
4
|
Summary: Large Language Model DevOps - a package to help deploy LLMs to the Cloud.
|
|
5
5
|
Home-page: https://github.com/sunholo-data/sunholo-py
|
|
6
|
-
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.74.
|
|
6
|
+
Download-URL: https://github.com/sunholo-data/sunholo-py/archive/refs/tags/v0.74.3.tar.gz
|
|
7
7
|
Author: Holosun ApS
|
|
8
8
|
Author-email: multivac@sunholo.com
|
|
9
9
|
License: Apache License, Version 2.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|